Avatar billede sbjerre Nybegynder
20. september 2005 - 09:57 Der er 5 kommentarer og
1 løsning

Dato konvertering mellem C# og MS SQL

Hej

Jeg arbejder på en applikation der bruger DateTime object og gemmer i MS SQL server, og her løber jeg ind i det evige problem som jeg nu vil finde en løsning for een gang for alle. Så helt overordnet spørger jeg: Hvordan får man C# applicationer og MS SQL server til at arbejde professionelt med datetime objekter således at jeg uafhængigt af hvilken SQL server applikationen kører på kan være sikker på at det kører.
Min webapplikationen kan jeg som regel kontrollere fuldt ud, men jeg har ikke altid fuld kontrol over SQL serveren.

Web-applicationen kører kører med regional settings på dansk så et inputfelt med teksten "29.09.2005" bliver via Convert.ToDateTime konverteret til et DateTime object med tiden "29-09-2005". Men når jeg forsøger at gemme denne værdi i min SQL server får jeg en fejl, da serveren forventer en værdi med syntaksen 'mm-dd-åååå' og der er som bekendt ingen 29. måned.
Jeg har tidligere brugt ToLocalTime() og ToUniversalTime() men kan ikke lige greje hvordan de kommer i spil i denne situation.

Hjælp!!

Mvh sbjerre
Avatar billede sbjerre Nybegynder
20. september 2005 - 09:58 #1
Min globalization er via web.config sat til:
<globalization requestEncoding="utf-8" responseEncoding="utf-8" culture="da-DK" uiCulture="da-DK" />
Avatar billede sbjerre Nybegynder
20. september 2005 - 10:34 #2
Jeg har fundet denne løsning der egentligt virker ok, men jeg tvivler på at det er den "fede" måde at gøre det på

DateTime dt = Convert.ToDateTime("29.09.2005");
Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US");
string test = dt.ToShortDateString();
Thread.CurrentThread.CurrentCulture = new CultureInfo("da-DK");
// test bliver i dette tilfælde: '9/28/2005'

Hvis der er bedre løsninger så skriv endeligt aligevel
Avatar billede arne_v Ekspert
20. september 2005 - 12:59 #3
et ord: parameters
Avatar billede arne_v Ekspert
20. september 2005 - 13:01 #4
hm - jeg har vist kun lige et eksempel med OldDbConnection på lager:

using System;
using System.Threading;
using System.Data.OleDb;

class MainClass
{
    public static void Main(string[] args)
    {
        OleDbConnection con = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\Database\MSAccess\Test.mdb");
        con.Open();
        OleDbCommand cre = new OleDbCommand("CREATE TABLE dtest (i INTEGER PRIMARY KEY, d DATETIME)", con);
        cre.ExecuteNonQuery();
        OleDbCommand ins = new OleDbCommand("INSERT INTO dtest VALUES (?, ?)", con);
        ins.Parameters.Add("@i", OleDbType.Integer);
        ins.Parameters.Add("@d", OleDbType.Date);
        for(int i = 0; i < 10; i++)
        {
            ins.Parameters["@i"].Value = i;
            ins.Parameters["@d"].Value = DateTime.Now;
            ins.ExecuteNonQuery();
            Thread.Sleep(1000);
        }
        Console.WriteLine("All rows :");
        OleDbCommand sel = new OleDbCommand("SELECT * FROM dtest", con);
        OleDbDataReader rdr = sel.ExecuteReader();
        while(rdr.Read())
        {
            int i = (int)rdr[0];
            DateTime d = (DateTime)rdr[1];
            Console.WriteLine(i + " " + d);
        }
        rdr.Close();
        Console.WriteLine("Rows last 5 seconds since " + DateTime.Now + " :");
        OleDbCommand sel2 = new OleDbCommand("SELECT * FROM dtest WHERE d > ?", con);
        sel2.Parameters.Add("@d", OleDbType.Date);
        sel2.Parameters["@d"].Value = DateTime.Now.AddSeconds(-5);
        OleDbDataReader rdr2 = sel2.ExecuteReader();
        while(rdr2.Read())
        {
            int i = (int)rdr2[0];
            DateTime d = (DateTime)rdr2[1];
            Console.WriteLine(i + " " + d);
        }
        rdr2.Close();
        OleDbCommand drp = new OleDbCommand("DROP TABLE dtest", con);
        drp.ExecuteNonQuery();
        con.Close();
    }
}

men det er helt det samme med SqlConnection (alle klasse navnene starter bare med
Sql)
Avatar billede arne_v Ekspert
04. november 2005 - 20:20 #5
kommet videre ?
Avatar billede sbjerre Nybegynder
11. oktober 2007 - 08:40 #6
lukket...
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