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