2017-03-28 3 views
-1

Ich bin konfrontiert mit dieser Konvertierung fehlgeschlagen. Ich möchte das gesamte ausgewählte Datum im Kalender und im Show-Event zum ausgewählten Datum abrufen. Ich kann gewähltes Datum aber wenn ich versuche, Starttag = zum ausgewählten Datum zu bekommen. Es ist mit dem Fehler unten fehlgeschlagen.Konvertierung fehlgeschlagen, wenn Datum und/oder Uhrzeit aus Zeichenkette konvertiert werden. in sql

Zusätzliche Informationen: Fehler bei der Konvertierung, wenn Datum und/oder Uhrzeit aus Zeichenfolge zu konvertieren.

strSQL = " SELECT CalendarID, Company,Header, convert(date,enddate,103)StartDate, convert(varchar,enddate,103) enddate, (starthour + ' : ' + startmin + ' : ' + startday) starttime, (endhour + ' : '+ endmin+ ' : '+ endday) endtime " & _ 
        "FROM tablename where StartDate ='" & calendar1.SelectedDate.ToShortDateString() & "'" 

Ich habe versucht, die Codes in das zu ändern, sondern auch die gleichen Fehler mit

Dim selecteddates As Date 
     selecteddates = calendar1.SelectedDate.ToShortDateString() 

strSQL = " SELECT CalendarID, Company,Header, convert(date,enddate,103)StartDate, convert(date,enddate,103) enddate, (starthour + ' : ' + startmin + ' : ' + startday) starttime, (endhour + ' : '+ endmin+ ' : '+ endday) endtime " & _ 
        "FROM tablename where StartDate =CAST('" & selecteddates & "' AS DATE) " 
+4

Dies ist eine schlechte Art der Codierung. Führen Sie keine Verkettung in SQL-Abfragen durch. Es ist verwundbar. Ich empfehle Ihnen, parametrisierte Abfragen zu verwenden. – Sankar

+4

Um hinzuzufügen, was Sankar sagt, indem Sie zu Parametern wechseln, profitieren Sie auch hier, weil ADO.Net bereits weiß, wie man .NET 'DateTime' in SQL Server' datetime' (oder 'datetime2 ', etc) Datentypen, so dass Sie das Datum nicht als * string * darstellen müssen, und Sie damit Ihre Formatierungsprobleme beseitigen. –

Antwort

1

richtige Antwort (en) bereits in den Kommentaren gegeben. Ich füge nur Beispielcode hier, um es klarer zu machen:

Dim strSQL As String = <sql>SELECT CalendarID, Company,Header, 
      convert(date,enddate,103) StartDate, convert(varchar,enddate,103) enddate, 
      (starthour + ' : ' + startmin + ' : ' + startday) starttime, 
      (endhour + ' : '+ endmin+ ' : '+ endday) endtime 
      FROM mytablename 
      where StartDate >= @dtStart and StartDate < @dtEnd 
      </sql> 

Dim tbl As New DataTable() 
Using con As New SqlConnection("server=.\SQLExpress;Database=MyDatabase;Trusted_Connection=yes") 
    Using cmd = New SqlCommand(strSQL, con) 
     cmd.Parameters.Add("@dtStart", SqlDbType.DateTime).Value = calendar1.SelectedDate.Date 
     cmd.Parameters.Add("@dtEnd", SqlDbType.DateTime).Value = calendar1.SelectedDate.Date.AddDays(1) 
     con.Open() 
     tbl.Load(cmd.ExecuteReader()) 
     con.Close() 
    End Using 
End Using 
Verwandte Themen