Avatar billede cocococo Praktikant
22. juni 2009 - 14:26 Der er 8 kommentarer og
1 løsning

datoformat problemer med sql

jeg forsøger at lave en booking del til et udlånssystem problemet er at det eksisterende system arbejder med datoformat dd-mm-yyyyy og sådan er det gemt i databasen(MsSql) men nu har jeg det problem at jeg skal checke om en dato (d) er større/mindre end datoerne i databasen, men det melder fejl i sql sætningen hvis jeg ikke formaterer den til mm-dd-yyyy

DateTime d = DateTime.Parse(datebox.Text.ToString());

Sqltxt="SELECT COUNT(id)  FROM book_db  WHERE  ( serial='" + serial.Text.ToString() + "'
AND book_date >='" + d.ToString("mm-dd-yyyy") + "')";
Avatar billede aaberg Nybegynder
22. juni 2009 - 14:35 #1
Det er klart den ikke kan finde ud af det, når du konverterer din datetime til en string!

Jeg går ud fra at datoen i databasen ligger gemt som en dato! Eller er den gemt som tekst?

Hvis den er gemt som en dato, løser du problemet ved at bruge parametre.
Avatar billede aaberg Nybegynder
22. juni 2009 - 14:37 #2
Avatar billede cocococo Praktikant
22. juni 2009 - 15:16 #3
strengen er der kun for at kunne konvertere til mm-dd-yyyy
da d alene giver en out of range fejl ved afviklingen

d er iøvrigt til at starte med en indtastet streng.
Avatar billede cocococo Praktikant
22. juni 2009 - 15:17 #4
og book_date ligger som en datetime i databasen
Avatar billede aaberg Nybegynder
22. juni 2009 - 15:35 #5
Hvis book_date ligger som en datetime i databasen, bør det vøre lige meget hvordan den som standard ser ud, når du henter den ud som tekst.

En datetime bliver ikke gemt som yyyy-mm-dd i databasen (med mindre den ligger som en varchar), den bliver gemt som et eget binært datetime format. Det er først når du SELECT'er fra tabellen, at den bliver konverteret til tekst, så du kan se noget der giver mening.

Prøv dette:

DateTime d = DateTime.Parse(datebox.Text.ToString());

Sqltxt="SELECT COUNT(id)  FROM book_db  WHERE  ( serial=@serial AND book_date >= @bookdate)

using (SqlConnection connection = new SqlConnection(connectionstring))
{
  using (SqlCommand command = connection.CreateCommand())
  {
    command.CommandText = Sqltxt;
    command.Parameters.AddWithValue(@serial, serial.Text.ToString());
    command.Parameters.AddWithValue(@bookdate, d);

    //Nu kan du Execute din command, eller bruge den i en DataAdapter, eller hvad du nu gør.
  }
}


Brug parameter, det er løsningen på alle sådanne problemer.

Undskyld at jeg sendte et link til et MySQL eksempel i min tidligere kommentar. Jeg var ikke helt vågen.
Avatar billede aaberg Nybegynder
22. juni 2009 - 15:37 #6
Her er dokumentationen fra Microsoft på SqlParameter klassen:
http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlparameter.aspx
Avatar billede cocococo Praktikant
02. juli 2009 - 12:15 #7
fik det , efter meget bøvl , til at virke med parametre 
tak aaberg_cc smid et svar
Avatar billede arne_v Ekspert
04. august 2009 - 03:29 #8
aaberg?
Avatar billede aaberg Nybegynder
04. august 2009 - 08:28 #9
aha, jeg må hellere smide et svar :-)
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
Kurser inden for grundlæggende programmering

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