2017-01-24 80 views
1

Windowsフォームを使用しています。フォームでは、新しい行を挿入して既存の行を一緒に更新するグリッドビューがあります。そして、以下のプロセスのためにInsertCommandが正常に動作し、以下のようにadap.Update(deltaTable);に例外をスロー同時実行違反: - UpdateCommandが予期された1つのレコードの0に影響を受けました

OracleDataAdapter adapter = new OracleDataAdapter(sql, conn); 
OracleCommandBuilder oraCmdBuilder = new OracleCommandBuilder(adapter); 
OracleDataAdapter adap = new OracleDataAdapter(); 
adap.SelectCommand = new OracleCommand(sql, conn); 

adap.InsertCommand = oraCmdBuilder.GetInsertCommand(); 
adap.InsertCommand.Connection = conn; 
adap.UpdateCommand = oraCmdBuilder.GetUpdateCommand(); 
adap.UpdateCommand.Connection = conn; 
adap.DeleteCommand = oraCmdBuilder.GetDeleteCommand(); 
adap.DeleteCommand.Connection = conn; 
adap.UpdateBatchSize = 100; 

int i = adap.Update(deltaTable); 

同時実行違反、コードです:UpdateCommandのは、予想1つの レコードの0影響を受けます。 updateメソッドの前にacceptchangesを追加しようとしましたが、その変更は削除に影響していました。行は削除されませんでした。

どのようなご提案も歓迎します。

ありがとうございます。私はこの問題に、あなたが更新する前に、元のデータとデータを制御しているあなたのupdateクエリでの理由

1)の下に直面し

よろしく

+0

Row.AcceptChanges()あなたが気づいたどこにでもいる[この](http://stackoverflow.com/questions/3388100/concurrency-violation-the-updatecommand-影響を受けた1つのレコードのうちの1つ)と[this](http://stackoverflow.com/questions/9521355/concurrency-violation-the-updatecommand-affected-0-of-the-expected-1 -records-v)これを新しい質問として投稿する前に? –

+1

またはこれhttp://stackoverflow.com/a/32558609/2946329 –

+0

ConflictOption.OverwriteChangesを追加すると、保存または任意のアクションが複数回繰り返されます。 – user703526

答えて

0

。解決するには、この条件をクエリから削除します。条件を削除すると、last modified winに変わります。条件は接頭辞が@originalです。あなたのコード内Update

WHERE CustomerID = @Original_CustomerID OR @Original_CustomerID IS NULL AND customer ID IS NULL 

2)のようなクエリが

関連する問題