我正在尝试使用以下代码获取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时我得到了这个错误: '#'附近的语法不正确. 请有人帮忙!
首先是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)
| 归档时间: |
|
| 查看次数: |
915 次 |
| 最近记录: |