2017-02-23 3 views
0

Ich bin ziemlich neu in SQL. Im Prinzip habe ich eine Datenbank mit einer Spalte mit dem Namen „Datum“, und ich möchte alle Einträge zurück, so dass „Datum“ ist zwischen startDate und endDateEinen Datensatz basierend auf dem Datumsbereich finden

Dim myStr As String = String.Format("Select * from {0} where [Date] between @date1 and @date2", databaseTableName) 

Dim ad As New SqlDataAdapter(myStr, sqlConn) 

ad.SelectCommand.Parameters.AddWithValue("@date1", frm.StartDate.Value.ToString("dd/MM/yyyy")) 
ad.SelectCommand.Parameters.AddWithValue("@date2", frm.EndDate.Value.ToString("dd/MM/yyyy")) 

wo frm eine Formular Windows Datum Zeitauswahl.

Nicht sicher, wo ich falsch gelaufen bin, aber die Abfrage gibt überhaupt nichts zurück.

+3

Sie sollen Daten in der Abfrage zu vorbei und rufen Sie 'ToString'. Konvertieren Sie keinen binären "Date" -Wert in einen "String". Wenn Sie tatsächlich die Zeit auf Null stellen wollen, dann tun Sie das, d. H. Verwenden Sie 'frm.StartDate.Value.Date'. – jmcilhinney

Antwort

1
Dim myStr As String = String.Format("SELECT * FROM {0} WHERE [Date] >= @date1 AND < @date2", databaseTableName) 

Dim ad As New SqlDataAdapter(myStr, sqlConn) 

ad.SelectCommand.Parameters.Add("@date1" SqlDbType.DateTime).Value = frm.StartDate.Value.Date 
ad.SelectCommand.Parameters.Add("@date2", SqlDbType.DateTime).Value = frm.EndDate.Value.Date.AddDays(1) 
-1

Wenn Sie 'TT/MM/JJJJ' festlegen, gibt SQL den Fehler zurück 'Die Konvertierung eines Varchar-Datentyps in einen DateTime-Datentyp führte zu einem Wert außerhalb des Bereichs.' Ich denke du solltest das Format wie folgt einstellen.

ad.SelectCommand.Parameters.AddWithValue("@date1", frm.StartDate.Value.ToString("yyyy/MM/dd")) 
ad.SelectCommand.Parameters.AddWithValue("@date2", frm.EndDate.Value.ToString("yyyy/MM/dd")) 
+1

Wenn Sie eine Zeichenfolge verwenden, um einen Datumswert für eine Abfrage festzulegen, tun Sie es immer noch falsch. –

+0

@JoelCoehoorn: Warum kann ich keine Zeichenfolge verwenden, um Datumswerte festzulegen, mein Freund? Es ist ein Beispiel: Wählen Sie Top 10 FirstName, ModifiedDate von Person.Person wo ModifiedDate zwischen '2009/01/10' und '2009/01/20' – Tomato32

+0

Mehrere Gründe. Einer davon ist, dass der Server möglicherweise ein anderes Datumsformat hat, das Sie erwarten. Es ist alles Spaß und Spiele, bis Sie einen Kunden in Deutschland bekommen, oder jemand wählt die falsche Region für eine Azure-Instanz. Ein weiterer Grund ist [Leistung] (http://blogs.msmvps.com/jcoehoorn/blog/2014/05/12/can-we-stop-using-addwithvalue-ready/). –

Verwandte Themen