访问 SQL 服务器语法转换
Access to SQL Server syntax changeover
我最近将我从 Access 制作的一个项目移到了 MS SQLServer,但这当然意味着我需要更改我的 SQL 语句中的一些代码。
我有这个子例程,我在其中获取字段 DateRenew
在 30 天内的所有记录...如何将其转换为 SQL?目前我收到以下错误消息
An unhandled exception of type 'System.Data.OleDb.OleDbException' occurred in MaintenanceControl.exe
Additional information: Incorrect syntax near '#'.
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
Dim td As String
Dim sd As String
sd = Format(Today.AddDays(31), "yyyyMMdd")
td = Format(Today, "yyyyMMdd")
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
YYYYMMDD 是 SQL (iso) 的日期格式
在 SQL 中,# 被替换为 '(单引号)
在 VB 中,您需要输入 ' as '' 作为转义序列 - 即输入一个单引号作为两个相应的单引号
直接使用SQL服务器端的日期函数更简单也不易出错
sql = "SELECT * FROM dbo.tblContracts WHERE DateRenew BETWEEN
CONVERT(DATE, GETDATE()) AND DATEADD(DAY, 31, CONVERT(DATE, GETDATE()))"
(为了便于阅读换行)
如果 GETDATE()
包含当前时间无关紧要,您可以省略 CONVERT(DATE, ...)
部分。
我最近将我从 Access 制作的一个项目移到了 MS SQLServer,但这当然意味着我需要更改我的 SQL 语句中的一些代码。
我有这个子例程,我在其中获取字段 DateRenew
在 30 天内的所有记录...如何将其转换为 SQL?目前我收到以下错误消息
An unhandled exception of type 'System.Data.OleDb.OleDbException' occurred in MaintenanceControl.exe
Additional information: Incorrect syntax near '#'.
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
Dim td As String
Dim sd As String
sd = Format(Today.AddDays(31), "yyyyMMdd")
td = Format(Today, "yyyyMMdd")
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
YYYYMMDD 是 SQL (iso) 的日期格式 在 SQL 中,# 被替换为 '(单引号) 在 VB 中,您需要输入 ' as '' 作为转义序列 - 即输入一个单引号作为两个相应的单引号
直接使用SQL服务器端的日期函数更简单也不易出错
sql = "SELECT * FROM dbo.tblContracts WHERE DateRenew BETWEEN
CONVERT(DATE, GETDATE()) AND DATEADD(DAY, 31, CONVERT(DATE, GETDATE()))"
(为了便于阅读换行)
如果 GETDATE()
包含当前时间无关紧要,您可以省略 CONVERT(DATE, ...)
部分。