访问 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, ...) 部分。