0

2つのデータセットと2つのdataAdapters(各データセットに1つ)を定義しました。作成後、2つのdataAdapterのそれぞれについて、SqlCommandBuilderを定義します。ここまではすべて順調です。dataAdapter1.Update(dataSet1)を使用して、データベースから非常に大丈夫な追加、変更、消去を行うことができます。ただし、この順序ではありません:erase、add、modify。

最初のデータセット、dataAdapterおよびsqlCommandBuilderのコードは次のとおりです。

                string sql = "SELECT * From localitati";
                da1 = new System.Data.SqlClient.SqlDataAdapter(sql, con);
                da1.Fill(ds1, "localitati");
                cmdBuilder1 = new SqlCommandBuilder(da1);

そして2番目:

            sql = "SELECT * From sucursale";
            da2 = new System.Data.SqlClient.SqlDataAdapter(sql, con);
            da2.Fill(ds2, "sucursale");
            //face automat select, insert ,etc !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
            cmdBuilder2 = new SqlCommandBuilder(da2);

なぜこれが起こっているのか、何か考えはありますか?

4

1 に答える 1

12

提供されたあなたの情報は役に立たない。しかし、私はエラーの意味を説明することができます。

ADO.Netで記述されたすべての更新コマンドは、次の形式です。

Update col1, col2 where col1=col1value AND col2=col2value

ADO.Netは、データベースから選択されたときの列の値を保持します。更新を実行するときの条件は、コミットしたときにどの列も変更されていないことです。

エラーが表示される理由は、selectを実行してからを呼び出すまでの間にデータベースの行が変更されたためですda2.UpdateChanges(ds2)。ロジックを見ると、行の値を2つの別々のデータセット(または2つの異なるスレッド)に選択し、選択を実行した後に更新を実行した可能性があります。

于 2010-11-29T20:11:55.453 に答える