执行查询时抛出异常
Exception thrown when executing query
我有 vb.net 应用程序表单,它包含 id 作为组合框。单击编辑按钮并选择其他 ID 后,我发现错误 就像图片 below.so 怎么办?
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
如错误消息所述,您没有打开与数据库的连接。添加一个打开和关闭,并可能将其包装在 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 命令中使用参数
命令和连接等数据库对象应在使用它们的方法中声明,以便正确处理它们。 Using...End Using
块会为您执行此操作,即使出现错误也是如此。
您不会将 cmd.ExecuteNonQuery()
用于 Select
语句。这仅用于 Update
、Insert
或 Delete
命令。
您不希望在更新用户界面时连接保持打开状态。因此,我们加载了一个数据 table,它在我们使用数据时不需要连接保持打开状态。 reader 确实需要打开连接。
photo真的是字符串类型吗?
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
我有 vb.net 应用程序表单,它包含 id 作为组合框。单击编辑按钮并选择其他 ID 后,我发现错误 就像图片 below.so 怎么办?
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
如错误消息所述,您没有打开与数据库的连接。添加一个打开和关闭,并可能将其包装在 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 命令中使用参数
命令和连接等数据库对象应在使用它们的方法中声明,以便正确处理它们。 Using...End Using
块会为您执行此操作,即使出现错误也是如此。
您不会将 cmd.ExecuteNonQuery()
用于 Select
语句。这仅用于 Update
、Insert
或 Delete
命令。
您不希望在更新用户界面时连接保持打开状态。因此,我们加载了一个数据 table,它在我们使用数据时不需要连接保持打开状态。 reader 确实需要打开连接。
photo真的是字符串类型吗?
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