Ich habe kürzlich ein Projekt von Access auf MS SQLServer verschoben, aber das bedeutet natürlich, dass ich etwas Code in meinen SQL-Anweisungen ändern muss.Zugriff auf die SQL Server-Syntaxumschaltung
Ich habe diese Subroutine, wo ich alle Datensätze bekomme, wo das Feld DateRenew
innerhalb von 30 Tagen ist ... Wie konvertiere ich das in SQL? Im Moment bekomme ich folgende Fehlermeldung
Eine nicht behandelte Ausnahme des Typs ‚System.Data.OleDb.OleDbException‘ in MaintenanceControl.exe aufgetreten
Zusätzliche Informationen: Falsche Syntax in der Nähe von ‚#‘.
Private Sub btn30Days_Click(sender As Object, e As EventArgs) Handles btn30Days.Click
Dim td As String
Dim sd As String
sd = Format(Today.AddDays(31), "MM/dd/yyyy")
td = Format(Today, "MM/dd/yyyy")
Try
sql = "SELECT * FROM dbo.tblContracts WHERE DateRenew BETWEEN #" & sd & "# AND #" & td & "#;"
conAd = New OleDb.OleDbDataAdapter(sql, con)
conset = New DataSet
conAd.Fill(conset)
ugModules.DataSource = conset
Catch ex As Exception
errorLog(ex.Message, ex.StackTrace)
MsgBox("Failed to retrieve contract information from database, refer to error log")
End Try
End Sub
Wenn Sie Ihr Programm zu SqlServer wechseln möchten, warum immer noch OleDb verwenden? Es gibt die Klassen in SqlClient, die für Sql Server spezifisch sind. Die Daten in SqlServer sind jedoch nicht mit # vorangestellt/postfixed. In jedem Fall sollten Sie keine Stringverkettungen mehr verwenden, sondern Parameter verwenden, so dass Sie keine Unterschiede mehr zwischen sql-server und access analysieren müssen oder –
Steve
Sehen Sie sich * Parameter an * anstatt Verkettung von Strings, um Ihre Abfragen zu erstellen - es würde hier helfen, weil Sie dann vermeiden, "DateTime" -Werte zu nehmen, sie in Strings konvertieren und dann den Server zwingen, sie wieder in "DateTime" -Werte zu konvertieren - solche Ketten von Konvertierungen können * Einführung * Formatierungsprobleme, die nicht existieren würden, wenn Sie die richtigen Typen überall verwenden, welche Parametrisierung erlaubt (Sie lernen auch SQL-Injection zur gleichen Zeit zu vermeiden) –
http://stackoverflow.com/questions/12048152/oledb-parameterized -Query –