Avatar billede lasserasch Juniormester
11. maj 2008 - 10:53 Der er 6 kommentarer og
1 løsning

Finde alle records hvor dato værdi af et datetime stamp passer!

Hejsa.

Jeg har et datetime felt i min SQL DB.
Når jeg loader min form vil jeg gerne finde alle de records som har samme dato værdi som en datetimepicker jeg har på formen, men tidsværdien er jeg ligeglad med.

Hvordan gør man det?

Min kode ser pt. sådan her ud, men den virker jo så selvfølgelig ikke, da tidsværdien også skal passe før sqlforespørgelsen giver resultat.



-------

public static Hashtable BillList(DateTime Date)
{
Hashtable result = new Hashtable();
string Query = "";
Query += "Select * from tbbills where createtime = '" + Date + "' order by createtime";

SqlDataReader Sqdr = Internal.SQL.SqlQuery(Query);
while (Sqdr.Read())
{
Bill B = new Bill();
B.Id = (int)Sqdr["Id"];
B.CloseTime = (DateTime)Sqdr["Closetime"];
B.CreateTime = (DateTime)Sqdr["Createtime"];
B.Customer = Customers.GetById((int)Sqdr["Customer"]);
B.State = GetStateFromInt((int)Sqdr["State"]);

result.Add(result.Count, B);
}
Sqdr.Close();
return result;
}
---------

/Lasse
Avatar billede lasserasch Juniormester
11. maj 2008 - 11:21 #1
Jeg fandt selv en løsning.

Brugte dette :

Query += "Select * from tbbills where DATEPART(YEAR, Createtime) = '" + Date.Date.Year + "' AND DATEPART(MONTH, Createtime) = '" + Date.Date.Month + "' AND DATEPART(DAY, CreateTime) = '" + Date.Date.Day + "' order by createtime";

Tråd lukket....

/Lasse
Avatar billede Syska Mester
11. maj 2008 - 14:09 #2
Kan gøres nemmere ...

"SELECT * FROM t1 WHERE Createtime = @p1"

Så bruger du bare parameters på din sql query .... og bruger Datetime.Now.Date som parameter value ....

Burde virke bedre end overstående måde at gøre det på :-)

Eks:
System.Data.SqlClient.SqlConnection con = new System.Data.SqlClient.SqlConnection("connection");
System.Data.SqlClient.SqlCommand cmd = new System.Data.SqlClient.SqlCommand("SELECT * FROM t1 WHERE Createtime = @p1", con);
cmd.Parameters.AddWithValue("@p1", DateTime.Now.Date);

// ouT
Avatar billede arne_v Ekspert
11. maj 2008 - 14:53 #3
Brug af parameters er helt klart godt, men det løser ikke problemet at 11. maj 8:51 skal
matche 11. maj 14:09.

Man må kunne spare lidt ved at erstatte month og day med dayofyear.
Avatar billede Syska Mester
11. maj 2008 - 15:44 #4
Fik det læst som om han gemte Creatime som Dato ... gør jeg nemlig selv indtil Date kommer i 2008 :-)

Så er det jo bare at gøre ....

"SELECT * FROM table1 WHERE Createtime BETWEEN @p1 AND @p2"

og så ... DateTime.Now.Date som @p1 og DateTime.Now.AddDays(1).Date som @p2

// ouT
Avatar billede lasserasch Juniormester
13. maj 2008 - 13:48 #5
Ja, men mit problem var bare at jeg gerne vil være uafhængig af om det er UK eller DK datetime format.

F.eks. hvis klienten kører med DK timeformat og SQL serveren med UK, så kan jeg vel ikke bare sende datetime.now med som parameter eller?


/Lasse
Avatar billede arne_v Ekspert
13. maj 2008 - 15:07 #6
Jo.

DateTime now indeholder en binaer tid (antal millisekunder siden et eller andet
tidspunlt).

UK vs DK har kun betydning naar tiden formateres som tekst.
Avatar billede Syska Mester
14. maj 2008 - 15:45 #7
præcis ... og så er det en lidt nemmere overskuelig løsning, end den du allerede har brugt ... *heheh*

Men begge virker ... det må vel være det vigtigste.

// ouT
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

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