执行查询时抛出异常

Posted

技术标签:

【中文标题】执行查询时抛出异常【英文标题】:Exception thrown when executing query 【发布时间】:2021-01-31 00:09:39 【问题描述】:

我有 vb.net 应用程序表单,它包含 id 作为组合框。单击编辑按钮并选择其他ID后,我发现错误如下图所示。那该怎么办?

Private Sub searchparfum()
    Dim dt As New DataTable
    Dim ds As New DataSet
    ds.Tables.Add(dt)
    Dim da As New OleDbDataAdapter("select num from parfum", MaConnection)
    da.Fill(dt)
    Dim r As DataRow
    cmb_parfum.AutoCompleteCustomSource.Clear()
    For Each r In dt.Rows
        cmb_parfum.AutoCompleteCustomSource.Add(r.Item(0).ToString)
    Next
    cmb_parfum.AutoCompleteMode = AutoCompleteMode.SuggestAppend
    cmb_parfum.AutoCompleteSource = AutoCompleteSource.CustomSource
End Sub

Private Sub cmb_parfum_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmb_parfum.SelectedIndexChanged
    qry = "select * from parfum where num ='" & (cmb_parfum.Text) & "' "
    cmd = New OleDbCommand(qry, MaConnection)
    cmd.ExecuteNonQuery()
    dr = cmd.ExecuteReader
    If dr.Read Then

        txt_num.Text = dr("num")
        lab_nom.Text = dr("nom")
        lab_prix.Text = dr("prix")
        stock_par.Text = dr("stock")
        txt_ventes.Text = dr("ventes")
        photo.Text = dr("photo")

    End If
End Sub

【问题讨论】:

这是一个可怕的问题,原因有很多。尽管收到提示,但您显然没有费心去参观站点以了解站点的工作原理,这意味着您肯定没有花任何时间在帮助中心了解更多信息。您在问题中只发布了代码,甚至没有对其进行格式化,然后您在标题中发布了一个问题。当出现提示时,您也不必费心输入图像描述,并且您发布了文本图片而不是文本,如果我们想搜索它,这会阻止我们复制它。您还发布了两个相同的屏幕截图。 正确的问题在问题本身中提供了完整而清晰的描述,其中包括您想要实现的目标、您如何尝试实现它以及尝试时会发生什么。屏幕截图应仅用于澄清。它们永远不应该是任何东西的唯一来源。错误消息是文本,应该这样发布。你应该做的最后一件事是写标题,它应该是对问题的总结,而不是问题本身。如果您懒得做力所能及的事来帮助我们,您会发现我们不太热心帮助您。 请阅读How to Ask和minimal reproducible example 【参考方案1】:

像命令和连接这样的数据库对象应在使用它们的方法中声明,以便正确处理它们。即使出现错误,Using...End Using 块也会为您执行此操作。

您不会将cmd.ExecuteNonQuery() 用于Select 语句。这仅用于UpdateInsertDelete 命令。

您不希望在更新用户界面时连接保持打开状态。因此,我们加载了一个数据表,它在使用数据时不需要连接保持打开状态。阅读器确实需要打开的连接。

照片真的是字符串类型吗?

Private ConStr As String = "Your connection string"

Private Sub cmb_parfum_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmb_parfum.SelectedIndexChanged
    Dim dt As New DataTable
    Dim qry = "select * from parfum where num = @Parfum;"
    Using cn As New OleDbConnection(ConStr),
            cmd As New OleDbCommand(qry, cn)
        cmd.Parameters.Add("@Parfum", OleDbType.VarWChar).Value = cmb_parfum.Text
        cn.Open()
        Using dr = cmd.ExecuteReader
            dt.Load(dr)
        End Using
    End Using 'connection is closed and disposed and command is disposed
    If dt.Rows.Count > 0 Then
        txt_num.Text = dt(0)("num").ToString
        lab_nom.Text = dt(0)("nom").ToString
        lab_prix.Text = dt(0)("prix").ToString
        stock_par.Text = dt(0)("stock").ToString
        txt_ventes.Text = dt(0)("ventes").ToString
        photo.Text = dt(0)("photo").ToString
    End If
End Sub

【讨论】:

【参考方案2】:

正如错误消息所说,您没有与数据库的开放连接。添加一个 open 和 close 并可能将其包装在 Try .. Catch 中,如下所示:

    cmd = New OleDbCommand(qry, MaConnection)
    Try
        MaConnection.Open()
        cmd.ExecuteNonQuery()
        dr = cmd.ExecuteReader
        If dr.Read Then
            txt_num.Text = dr("num")
            lab_nom.Text = dr("nom")
            lab_prix.Text = dr("prix")
            stock_par.Text = dr("stock")
            txt_ventes.Text = dr("ventes")
            photo.Text = dr("photo")
        End If
    Catch ex As Exception
        ' Handle any exception
    Finally
        MaConnection.Close()
    End Try

还要考虑在 SQL 命令中使用参数

【讨论】:

以上是关于执行查询时抛出异常的主要内容,如果未能解决你的问题,请参考以下文章

React Native:执行 UI 块时抛出异常

Windows Azure:“已添加具有相同密钥的项目。”选择时抛出异常

JPA CONCATE 与 IN 运算符一起使用时抛出异常

new ActiveXObject("Scripting.FileSystemObject") 时抛出异常 .

Java 异常 重写方法时抛出异常

GraphQL java:当请求有未使用的变量时抛出异常