2016-03-21 3 views
-1

Я пытаюсь удалить все записи из таблицы SQL в VB.net. Мой код делает это:Удаление элементов из таблицы sql в VB.net

Dim SQL As String = "DELETE FROM MTable" 
    Using CN As New OleDb.OleDbConnection(AddPage.DBConnect) 
     CN.Open() 
     Dim DBcmd As New OleDb.OleDbCommand(SQL, CN) 
     DBcmd.ExecuteNonQuery() 
     CN.Close() 
    End Using 

    'SQLDataset.Tables("Mtable").Clear() 

    MtableTA.Update(SQLDataset) 

    SQL = "DELETE FROM ITable" 
    Using CN As New OleDb.OleDbConnection(AddPage.DBConnect) 
     CN.Open() 
     Dim DBcmd As New OleDb.OleDbCommand(SQL, CN) 
     DBcmd.ExecuteNonQuery() 
     CN.Close() 
    End Using 

    ' SQLDataset.Tables("ITable").Clear() 

    ITableTA.Update(SQLDataset) 

Mtable и Itables являются таблицы SQL, в то время как MtableTA и ItableTA являются настольные адаптеры.

я в конечном итоге получаю сообщение об ошибке, которое гласит

An unhandled exception of type 'System.Data.DBConcurrencyException' occurred in System.Data.dll 
    Additional information: Concurrency violation: the UpdateCommand affected 0 of the expected 1 records. 

раздел, где это occurss не предусмотрено в коде выше, но это вызов MtableTA.update (SQLDataSet). Любая помощь будет очень высоко ценится. Я также использую OLEDB, если это помогает.

+0

базы данных Вы, вероятно, нужно использовать 'ExecuteNonQuery()' вместо 'Update' поскольку вы не обновляете, а удаляете. –

+0

FYI MySQL не является доступом – Plutonix

+0

Не уверен в MySQL, но Truncate Table - лучший вариант для SQL Server. Уничтожьте все адаптеры таблицы перед усечением и воссоздайте позже. – rheitzman

ответ

1

Вы непосредственно удалили строки, минуя методы TableAdapter, чтобы сделать это. Поэтому очень вероятно, что при вызове обновления возникают конфликты с данными, измененными в TableAdapter и недоступными в базе данных.
После удаления строки непосредственно с помощью OleDbCommand.ExecuteNonQuery вы должны просто обновить адаптеры таблиц для синхронизации их с реальной ситуацией на физическом столе

SQLDataset.Tables("ITable").Clear() 
ITableTA.Adapter.Fill(SQLDataSet.ITable) 
Смежные вопросы