从数据集和SQL Server中删除记录

时间:2013-02-12 12:51:34

标签: vb.net sql-server-2008 visual-studio-2008

我正在尝试从DataTable中删除记录,然后更新它附加到的数据库。

我删除了一行DataGridView,然后使用:

更新我的数据集
                Me.Tab2_DGVDuty.Rows.RemoveAt(Me.Tab2_DGVDuty.CurrentRow.Index)
                ds1.AcceptChanges()
                Tab2_DGVDuty.Refresh()

然后我调用我的adapter.update如下:

            Dim adapter As New SqlDataAdapter
            Dim cmdBuilder As New SqlCommandBuilder(adapter)
            Dim DutyDetails As String = "SELECT * from MyTable"

            adapter.SelectCommand = New SqlCommand(DutyDetails, SQLConn)
            adapter.UpdateCommand = cmdBuilder.GetUpdateCommand
            adapter.DeleteCommand = cmdBuilder.GetDeleteCommand

            Dim cb As SqlCommandBuilder = New SqlCommandBuilder(adapter)

            adapter.Update(ds1.Tables("DT_Table"))

但是当我重新加载数据时,我的记录仍然存在。如果我更改了一个值并进行了更新,这样可以正常工作,但由于某种原因,删除不会。

任何帮助都非常感激。

编辑: 好的我按照以下建议将删除更改为以下内容:

ds1.Tables("DT_Table").Rows(Tab2_DGVDuty.CurrentRow.Index).Delete()

这是附加到一个按钮,它第一次删除罚款,但在第二次按下删除另一条记录没有任何反应。如果我使用

ds1.AcceptChanges()

然后它工作正常。但是,如果我使用上述代码,那么下面的代码不会删除数据库中的任何内容:

            Dim adapter As New SqlDataAdapter
            Dim cmdBuilder As New SqlCommandBuilder(adapter)
            Dim DutyDetails As String = "SELECT * from MyTable"

            adapter.SelectCommand = New SqlCommand(DutyDetails, SQLConn)
            adapter.UpdateCommand = cmdBuilder.GetUpdateCommand
            adapter.DeleteCommand = cmdBuilder.GetDeleteCommand

            Dim cb As SqlCommandBuilder = New SqlCommandBuilder(adapter)

            adapter.Update(ds1.Tables("DT_Table"))

1 个答案:

答案 0 :(得分:2)

  1. 您不想从DataRow中移除DataTable,您想要Delete

    ds1.Tables("DT_Table").Rows(Tab2_DGVDuty.CurrentRow.Index).Delete()
    
  2. 之后请勿致电ds1.AcceptChanges(),因为Update将无法识别此行已更改,因为它会将RowState更改为UnchangedDataAdapter.Update隐含地调用AcceptChanges作为最后一步,而不是你。

  3. 我认为Tab2_DGVDutyDataGridView而不是DataTable,我已将此考虑在上面。