我最近將一個項目從Access創建到MS SQLServer,當然這意味着我需要更改一些SQL語句中的代碼。訪問SQL Server語法轉換
我有這個子程序,我得到的所有記錄,其中字段DateRenew
是在30天內...如何將其轉換爲SQL?目前,我得到了以下錯誤消息
類型「System.Data.OleDb.OleDbException」未處理的異常發生在MaintenanceControl.exe
其他信息:附近有語法錯誤「#」。
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
如果您想將您的程序切換到SqlServer,爲什麼仍然使用OleDb? SqlClient中的類是特定於Sql Server的類。然而,SqlServer中的日期並沒有前綴/後綴#和任何情況下,你應該停止使用字符串連接,但使用參數,所以沒有更多的麻煩解決sql服務器或訪問之間的差異或<把你的數據庫名稱在這裏> – Steve
看看使用*參數*而不是串聯字符串來創建你的查詢 - 它會幫助你,因爲你避免使用'DateTime'值,將它們轉換爲字符串,然後強制服務器將它們轉換回'DateTime'值 - 這樣的轉換鏈可以*引入*格式化問題,如果您始終使用適當的類型,哪些參數化允許(您還可以學習避免同時注入SQL注入),則不存在格式問題 –
http://stackoverflow.com/questions/12048152/oledb-parameterized - 查詢 –