Удаление записи из набора данных и сервера SQL

Я пытаюсь удалить запись из 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 ответ

Решение
  1. Вы не хотите удалять DataRow от DataTable хочешь Delete Это

    ds1.Tables("DT_Table").Rows(Tab2_DGVDuty.CurrentRow.Index).Delete()
    
  2. Не звони ds1.AcceptChanges() после того как Update не будет признавать, что этот ряд изменился больше тогда, потому что он изменит это RowState в Unchanged, DataAdapter.Update звонки AcceptChanges как последний шаг неявно, а не вы.

  3. Я предполагаю что Tab2_DGVDuty это DataGridView а не DataTable Я учел это выше.

Другие вопросы по тегам