附近的语法不正确

附近的语法不正确

我正在尝试使用此代码获取日期=今天的最大字段:

    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()

但是当运行应用程序时,出现此错误:
'#'附近的语法不正确。
有人可以帮忙吗!

最佳答案

首先,最重要的是 USE PARAMETERISED QUERIES ,连接字符串容易受到格式错误的SQL,恶意的SQL注入(inject)和转换错误的影响,此外,由于为传递的每个不同的值都会创建一个新计划,因此它会停止查询计划的重用。这已经解决了您的问题,因为您不必担心要对哪种数据类型使用哪些限定符(如注释中所指出的,您需要使用'而不是用于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

关于sql - '#'附近的语法不正确。 VB.net与SQL数据库,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35553360/

10-14 13:10