0

データベースに接続されたデータセットがあります。Dataset と TableAdapterManager は、接続に基づいて VS によって自動作成されました。

私はthis.tableAdapterManager.UpdateAll(testcheckerDataSet); それがうまくいっているようにすることができます。

次に、(サード パーティのデータベース エディターを使用して) .db ファイルを "blank_testing.db" (2 番目のデータベース) にコピーし、そこからすべてのデータを削除しました。したがって、データのないスキームだけがあります。

今、私は(コードで)「testchecker.db」(1番目のデータベース)からのデータでデータセットを埋め、from要素を使用してデータを変更し、データを2番目のデータベースに保存してから1番目のデータベースに保存したいと考えています。アダプターごとに接続文字列を変更するようにしています。

string originalPath = tableAdapterManager.Connection.ConnectionString;

       string ns = tableAdapterManager.Connection.ConnectionString.Replace("testchecker.db", "blank_testing.db");

        tableAdapterManager.Connection.ConnectionString = ns;
        group_testingTableAdapter.Connection.ConnectionString = ns;
        groupsTableAdapter.Connection.ConnectionString = ns;
        testingTableAdapter.Connection.ConnectionString = ns;


       this.tableAdapterManager.UpdateAll((testcheckerDataSet) testcheckerDataSet.Copy() ); // here error


        tableAdapterManager.Connection.ConnectionString = originalPath;
        group_testingTableAdapter.Connection.ConnectionString = originalPath;
        groupsTableAdapter.Connection.ConnectionString = originalPath;
        testingTableAdapter.Connection.ConnectionString = originalPath;

this.tableAdapterManager.UpdateAll( testcheckerDataSet );

しかし、「更新コマンドが 1 から 0 に影響した同時実行違反」というエラーが表示されます。2番目のデータベースにデータがまったくないために発生すると思います。

それで、誰かが現在のデータセットを別のdbファイルに保存してから、最初の(元の)dbに保存する方法を教えてもらえますか?

ありがとう。

4

1 に答える 1

2

ここでの問題は、メソッドを呼び出すときにUpdateAll、データベースから前のレコードを見つけて更新しようとすることです。しかし、ここで 2 番目のデータベースにはレコードがありません。あなたが試すことができるのは、あなたのすべてのDataRowsを繰り返し処理しDataTable、メソッドを使用しDataRow.SetAdded()て行を変更するDataRowStateと、レコードが新しく追加されたと見なされます。

もう 1 つ:が. であるインスタンスで
SetAddedのみ呼び出すことができます。で呼び出すことができます。次に、それぞれのプロパティも変更されます。追加および変更された行は変更されず、削除された行は削除されます。これで、 を呼び出すことができます。DataRowRowStateUnchangedAcceptChangesDataSetRowStateDataRowDataRow.SetAdded()

于 2012-05-12T09:48:20.000 に答える