Avatar billede ihtezaz Praktikant
07. juni 2005 - 10:31 Der er 12 kommentarer og
1 løsning

Dato formatering for SqlDateTime, når man køre med en amerikansk

Hej

Hvilken måde håndtere man bedst dato formatering for SqlDateTime, når man køre med en amerikansk Dato format på SqlServeren ?  Jeg arbejder på en asp.net applikation. Et eksempel på både formatering i en stored procedure og et på formatering i applikationen vil være helt fint.
Avatar billede arne_v Ekspert
07. juni 2005 - 10:42 #1
brug parameters !
Avatar billede ihtezaz Praktikant
07. juni 2005 - 10:53 #2
Kan du ikke uddybe lidt arne
Avatar billede arne_v Ekspert
07. juni 2005 - 11:08 #3
Jeg har nok et eksempel liggende.

C# eller VB.NET ?
Avatar billede ihtezaz Praktikant
07. juni 2005 - 11:27 #4
C#
Avatar billede arne_v Ekspert
07. juni 2005 - 11:32 #5
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();
    }
}
Avatar billede arne_v Ekspert
07. juni 2005 - 11:32 #6
det er en console app  og ikke en web app

det er Access og ikke SQLServer

men teknikken er præcis den samme
Avatar billede ihtezaz Praktikant
07. juni 2005 - 12:08 #7
Ok, jeg tror at der sket en misforståelse... det jeg ønsker er at, når brugeren indtaster en dato i europæisk datoformat: 16-06-2005 skal den i min SqlDatabase indsættes som 6-16-2005 dvs. i amerikansk format. Kunne du evt. istedet for fortælle mig om et cast funktion i såvel min applikation som i en stored procedure.

Det du gør, er det, at oprette midlertidig tabel og konvertere datoen om og nedlæg tabellen ?
Avatar billede arne_v Ekspert
07. juni 2005 - 12:25 #8
pointen er at min kode ingen steder indeholder datoer i tekst format - og når man
ikek bruger datoer i tekst format så er der ingen forskel på DK og US (teknisk
set er det nemlig et tal med antal millisekunder siden en gang for lang tid siden)

at jeg opretter en tabel til at demonstrere brugen af parameters er bare
demo setup
Avatar billede arne_v Ekspert
07. juni 2005 - 12:26 #9
Så det du gør er at bruge:

DateTime dt = DateTime.Parse(textfieldmedbrugerdato.Text);

og så gemme i databasen med parameters.
Avatar billede arne_v Ekspert
07. juni 2005 - 12:27 #10
den parse bruger så windows opsætning for dato format, hvis du angiver culture som andet
argument til parse så kan du overide det
Avatar billede ihtezaz Praktikant
07. juni 2005 - 13:04 #11
den mulighed er ikke med SqlDateTime, den godtager ikke følgende:
SqlDateTime dt = SqlDateTime.Parse(textfieldmedbrugerdato.Text);
Avatar billede ihtezaz Praktikant
07. juni 2005 - 13:13 #12
Det virker helt fint nu, istedet for SqlDateTime kan man også bare brug DateTime, selvom der i paramter oprettelsen er angivet at datoen er typen SqlDateTime, hvilket jeg ikke vidste. Danke arne. smid et svar.
Avatar billede arne_v Ekspert
07. juni 2005 - 13:56 #13
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