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

    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 


评论关闭
IT序号网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!