Avatar billede brian0905 Nybegynder
15. august 2005 - 08:26 Der er 3 kommentarer og
1 løsning

Localization, globalization og collation

Hejsa, :-)

Jeg er ved at indsætte nogle datoer i en MS SQL database. Problemet er at jeg har en default collation på min database (engelsk) dette betyder at når jeg så indsætter en dato med følgende kode:

insert into tabel(dato) values('"+DateTime.Now.ToString()+"');

Så får jeg en fejl, da DateTime er lokaliseret til at passe til min indstilling. Jeg vil gerne løse det på en generel måde, således at personer i Tyskland, england, italien japan... osv kan benytte min database også, uafhængigt af hvilken collation de bruger i deres database. Det betyder vel at jeg skal have en database Culture angivet i min web.config fil - eller hvad?

Er der en anden, og måske smartere/nemmere, måde?
Avatar billede arne_v Ekspert
15. august 2005 - 13:59 #1
drop konverteringer til streng og indsæt med parameters

så er du helt uafhængig af DK/EN
Avatar billede arne_v Ekspert
15. august 2005 - 14:00 #2
eksempel (VB.NET console app mod SQLServer):

Imports System
Imports System.Threading
Imports System.Data
Imports System.Data.SqlClient

Class MainClass
    Public Shared Sub Main(ByVal args As String())
        Dim con As SqlConnection = New SqlConnection("server=ARNEPC3;Integrated Security=SSPI;database=Test")
        con.Open
        Dim cre As SqlCommand = New SqlCommand("CREATE TABLE dtest (i INTEGER PRIMARY KEY, d DATETIME)", con)
        cre.ExecuteNonQuery
        Dim ins As SqlCommand = New SqlCommand("INSERT INTO dtest VALUES (@i, @d)", con)
        ins.Parameters.Add("@i", SqlDbType.Int)
        ins.Parameters.Add("@d", SqlDbType.DateTime)
        Dim i As Integer
        For i = 0 To 9
            ins.Parameters("@i").Value = i
            ins.Parameters("@d").Value = DateTime.Now
            ins.ExecuteNonQuery
            Thread.Sleep(1000)
        Next
        Console.WriteLine("All rows :")
        Dim sel As SqlCommand = New SqlCommand("SELECT * FROM dtest", con)
        Dim rdr As SqlDataReader = sel.ExecuteReader
        While rdr.Read
            Dim iv As Integer = CType(rdr(0), Integer)
            Dim dv As DateTime = CType(rdr(1), DateTime)
            Console.WriteLine(iv & " " & dv)
        End While
        rdr.Close
        Console.WriteLine("Rows last 5 seconds since " + DateTime.Now + " :")
        Dim sel2 As SqlCommand = New SqlCommand("SELECT * FROM dtest WHERE d > @d", con)
        sel2.Parameters.Add("@d", SqlDbType.DateTime)
        sel2.Parameters("@d").Value = DateTime.Now.AddSeconds(-5)
        Dim rdr2 As SqlDataReader = sel2.ExecuteReader
        While rdr2.Read
            Dim iv As Integer = CType(rdr2(0), Integer)
            Dim dv As DateTime = CType(rdr2(1), DateTime)
            Console.WriteLine(iv & " " & dv)
        End While
        rdr2.Close
        Dim drp As SqlCommand = New SqlCommand("DROP TABLE dtest", con)
        drp.ExecuteNonQuery
        con.Close
    End Sub
End Class
Avatar billede brian0905 Nybegynder
16. august 2005 - 12:43 #3
Nåååh, yes.... naturligvis...takker, smid lige et svar
Avatar billede arne_v Ekspert
16. august 2005 - 13:07 #4
kommer her
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester