2016-03-21 48 views
-1

VB.netのSQLテーブルからすべてのレコードを削除しようとしています。これを行うための私のコードは次のとおりです。MtableTAとItableTAはテーブルアダプタいる間VB.netのSQLテーブルから項目を削除する

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表です。

Iはまた

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を利用しているなら、私はOLEDBも使用しています

+0

に実際の状況とそれらを同期するTableAdaptersをリフレッシュする必要がありOleDbCommand.ExecuteNonQuery使用して直接行を削除した後
更新はしていないが削除しているからです。 –

+0

FYI MySQLはアクセスできない – Plutonix

+0

MySQLについてはわかりませんが、SQL ServerではTruncate Tableがより良いオプションです。切り捨て前にテーブル・アダプターをすべて破棄し、後で再作成してください。 – rheitzman

答えて

1

これを行うために、TableAdapterメソッドをバイパスしている行を直接削除しました。したがって、更新プログラムを呼び出すと、TableAdapterで変更されたデータとの競合が発生し、データベースではそれ以上使用できなくなる可能性が高くなります。あなたはおそらく `は、ExecuteNonQuery()`の代わりに `のUpdate`を使用する必要があるあなたは、単にあなたの物理的なデータベーステーブル

SQLDataset.Tables("ITable").Clear() 
ITableTA.Adapter.Fill(SQLDataSet.ITable) 
関連する問題