我正在尝试使用以下代码获取Max字段中的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()
但在运行应用程序时出现此错误: '#'附近的语法不正确。 也许有人可以帮忙!
答案 0 :(得分: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
答案 1 :(得分:-3)
你需要在这里使用单引号而不是hash,如果你也可以使用string.format(而不是手动连接)会更好
Dim sql1 As String = String.Format("select max(snum) from tblbill where idate='{0}'",todaydate)