在调用问题之前尚未初始化 SelectCommand 属性'Fill'



在调用"填充"问题之前,SelectCommand 属性尚未初始化:

Private Sub DeleteButton_Click(sender As Object, e As EventArgs) Handles DeleteButton.Click
Dim tables As DataTableCollection
Dim source1 As New BindingSource
Dim row As New Integer
Try
ds = New DataSet
tables = (ds.Tables)
da = New OleDbDataAdapter
da.Fill(ds, "Booking")
Dim cmdstr As String = "delete * from [Booking] where ID = " & DataGridView1.SelectedRows(0).Cells(0).Value.ToString()
Dim cmd As New OleDbCommand(cmdstr, objCon)
da.SelectCommand = cmd
objCon.Open()
cmd.ExecuteNonQuery()
objCon.Close()
Catch ex As Exception
MessageBox.Show(ex.Message)
End Try
End Sub

更改

da.SelectCommand = cmd 

da.DeleteCommand = cmd

在代码开头重新保护Dim语句;你从不在代码中使用表、source1 或行,所以声明它们是没有意义的。

转到Try您为 ds 分配一个New DataSet。这是空的,因此将 Tables 集合分配给表毫无意义。这也将是空的。

接下来,创建一个New DataAdapter。新的数据适配器没有选择命令,因此它将无法.Fill任何内容。

然后,将删除命令分配给数据适配器的 SelectCommand 属性。这是没有道理的。

最后你执行你的命令。如果不是其他代码,这应该有效。

将数据库对象保留在本地,以便可以控制它们的关闭和释放。Using...End Using会为您处理这个问题。Using 还充当 Dim 语句,因此它还声明变量。您可以通过用逗号分隔多个变量来在单个 Using 中包含多个变量。

我猜到了你ID字段的数据类型。检查您的数据库。

Private Sub DeleteButton_Click(sender As Object, e As EventArgs) Handles DeleteButton.Click
Try
Using cn As New OleDbConnection("Your connection string"),
cmd As New OleDbCommand("delete * from [Booking] where ID = @ID", cn)
cmd.Parameters.Add("@ID", OleDbType.Integer).Value = DataGridView1.SelectedRows(0).Cells(0).Value
cn.Open()
cmd.ExecuteNonQuery()
End Using
Catch ex As Exception
MessageBox.Show(ex.Message)
End Try
End Sub

最新更新