'#'附近的语法不正确.VB.net与SQL数据库

eng*_*sel 2 sql vb.net

我正在尝试使用以下代码获取date = today的Max字段:

    Dim todaydate = Format(Today.Date, "dd/MM/yyyy")
    Dim sql1 As String = "Select max(snum) From tblbill where idate =  #" & todaydate & "# "
    Dim conn1 As SqlConnection = New SqlConnection(constr)
    Dim cmd1 As SqlCommand = New SqlCommand(sql1, conn1)
    conn1.Open()
    Dim dr1 As SqlDataReader = cmd1.ExecuteReader
    dr1.Read()
    If IsDBNull(dr1(0)) Then
        TextBox6.Text = 1
    Else
        TextBox6.Text = dr1(0) + 1
    End If
    dr1.Close()
    cmd1.Dispose()
    conn1.Close()
Run Code Online (Sandbox Code Playgroud)

但是当运行app时我得到了这个错误: '#'附近的语法不正确. 请有人帮忙!

Gar*_*thD 9

首先是USE PARAMETERISED QUERIES,连接字符串容易受到格式错误的SQL,恶意SQL注入和转换错误的影响,此外它还会停止重复使用查询计划,因为为每个传递的不同值创建了一个新计划.这已经解决了你的问题,因为你不需要担心什么限定符用于什么数据类型(如你需要使用的注释中指出的'而不是#MS Access),这也意味着你不需要担心格式是否是,DD/MM/YYYY或者MM/DD/YYYY你告诉SqlCommand期望一个日期,所以区域设置不会影响任何东西.

其次,使用Using块来让IDisposable对象自我清理是个好主意:

Dim sql1 As String = "Select max(snum) From tblbill where idate =  @Date "
Using conn1 As New SqlConnection(constr)
Using cmd1 As New SqlCommand(sql1, conn1)

    cmd1.Parameters.Add("@Date", SqlDbType.DateTime).Value = Today.Date
    conn1.Open()

    Using dr1 As SqlDataReader = cmd1.ExecuteReader
        If IsDBNull(dr1(0)) Then
            TextBox6.Text = 1
        Else
            TextBox6.Text = dr1(0) + 1
        End If
    End Using

End Using
Run Code Online (Sandbox Code Playgroud)