You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

VB.Net执行SQL查询时出现异常:原因及解决方法

错误原因及解决方案

错误原因

  1. 数据库连接对象未初始化:代码仅声明了连接字符串connstring,但未创建SqlConnection实例就直接使用conn变量,会引发对象引用未设置的错误。
  2. 日期参数格式错误:给SqlDbType.Date类型的参数拼接了#符号,这是Access数据库的日期写法,SQL Server无需额外格式转换,直接传入DateTime类型值即可,拼接#会导致类型转换失败。
  3. DataReader使用逻辑错误:调用ExecuteReader后立即关闭连接,而DataReader需要保持连接打开才能读取数据,会导致读取失败。

解决方案

修正后的代码如下:

' 读取连接字符串并实例化数据库连接
Dim connstring As String = ConfigurationManager.ConnectionStrings("ConnectionString").ConnectionString
Using conn As New SqlConnection(connstring)
    ' 构造SQL命令
    Dim cmd As New SqlCommand("SELECT * FROM Table_1 WHERE date_register >= @date_register AND date_register <= @date_register2", conn)
    
    ' 直接传入DateTime类型参数,无需拼接格式符号
    cmd.Parameters.Add("@date_register", SqlDbType.Date).Value = DatePicker.Value
    cmd.Parameters.Add("@date_register2", SqlDbType.Date).Value = DatePicker2.Value

    conn.Open()
    ' 使用Using自动释放DataReader,同时指定CommandBehavior.CloseConnection让连接随DataReader关闭
    Using myreader As SqlDataReader = cmd.ExecuteReader(CommandBehavior.CloseConnection)
        ' 在这里处理读取到的数据,示例:
        While myreader.Read()
            ' 如获取字段值:Dim registerDate As Date = myreader.GetDateTime(myreader.GetOrdinal("date_register"))
        End While
    End Using
End Using

关键修正说明

  • 用Using语句管理SqlConnection和SqlDataReader,确保资源自动释放,避免内存泄漏。
  • 移除参数值的#拼接,直接传入DatePicker.Value(本身为DateTime类型,匹配SqlDbType.Date参数类型)。
  • 实例化SqlConnection对象,解决未初始化的问题。
  • 使用CommandBehavior.CloseConnection,让连接在DataReader关闭时自动关闭,无需手动调用conn.Close()。

内容的提问来源于stack exchange,提问作者yossef saad

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 15:00:09