1

http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlcommandbuilder.aspxから SQL Command Builder クラスを読み ましたが、select および update コマンドを使用してデータセット/データベースで行われた更新を表示できることがわかりました.

単一のデータセットを使用している場合、SQL Command Builder の概念は明確ですが、2 つの異なるデータセットを使用する場合はどうすればよいですか?

シナリオ: データベースから 1 つのデータセット ds1 に値を読み込んでいます。これは、SQL アダプターと SQL コマンド ビルダーに割り当てられます。現在、ds1 から選択した値のみを読み取り、2 番目のデータセット ds2 に格納しています。これは、SQL データ アダプターおよび SQL コマンド ビルダーには割り当てられません。

データベースが更新されるかどうかに関係なく、ds2 のデータを更新するかどうかが心配です。また、SQL Command builder と SQL Adapter を使用してどのようにすればよいですか。

//プライマリ データセット

ds = new ProductDataSet();
        command = new SqlCommand(
            "SELECT no, name, price, cost, dept FROM PRODUCTS", connection);
        adapter = new SqlDataAdapter();
        adapter.SelectCommand = command;            
        adapter.Fill(ds, "table");

プライマリ データセットは、フォーム ロード イベントの入力です。ユーザーは選択したアイテム番号を入力します。これは、プライマリ ds から検索され、2 番目の ds に保存/表示されます (2 番目の ds は現在、アダプターまたはコマンド ビルダーに接続されていません)。例えば; 2nd dsには3つのアイテムがあります。

ここで、ユーザーが 2 番目の ds の情報を更新すると、データベースが自動的に更新され、グリッドに表示されるはずです。

//2 番目の ds2 更新コード

for (int i = 0; i < ds2.Tables[0].Rows.Count; i++)
                            {
 string item = ds2.Tables[0].Rows[i][0].ToString();                   

command = new SqlCommand("UPDATE PRODUCTS SET " + _colName + " = '" + _newValue + "'" + "WHERE ITEM_NO = '" + item + "'", Class1.conn);                                    
datagrid.DataSource = ds2.Tables[0];

}

あなたの提案によると、上記のコードでアダプター/ビルダーを追加/宣言している場合、機能しません。テーブル マッピング エラーが発生しています。

4

2 に答える 2

3

別の SQLAdapter と SQLCommandBuilder を使用してください。そのページの例は、データベースを更新する方法を示しています。次のように、更新するフィールドをクエリの形式で指定するだけです。

SELECT Name, Address, Phone, Email FROM Contact

コマンド ビルダーは適切な SQLUPDATEステートメントを生成します。

于 2012-11-13T19:30:52.727 に答える