我正在尝试使用此代码获取日期=今天的最大字段:
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/