2012-01-20 8 views
0

私はSqlDataAdapter.InsertCommandに別のSqlConnectionが必要な理由

SqlDataAdapter adapterSales = new SqlDataAdapter (mySelectCommand, connString) 

を作成し、その後、私は、アダプタ用のINSERTコマンドを作成した場合は、私は最後のコンストラクタに別の接続を渡す必要がないのはなぜ

adapterSales.InsertCommand = new SqlCommand (myInsertCommand); 

を言うことができますか?私は、すでに接続文字列を渡していて、なぜアダプタがSQL接続を作成するために動作しないのか、ということです。

答えて

1

接続を必要とするコマンドオブジェクト(選択、挿入、更新、削除)です。データアダプタ自体に実際に直接関連する特定の接続はありません。反射板を使用して、私は次のようにSqlDataAdapter(直接ではありません接続オブジェクト)のメンバーであることを参照してください。

// Fields 
private SqlCommandSet _commandSet; 
private SqlCommand _deleteCommand; 
private SqlCommand _insertCommand; 
private SqlCommand _selectCommand; 
private int _updateBatchSize; 
private SqlCommand _updateCommand; 
private static readonly object EventRowUpdated; 
private static readonly object EventRowUpdating; 

ので、理論的には、あなたは、データアダプタに関連付けられている各コマンドを使用すると、別の接続を使用することができますが、そのシナリオには多くの用途があることは明らかではありません(おそらく、一方は読み取り専用で、更新は他方に送られます)。 MSDNとして

+0

ありがとうございます。これは実際にそれを説明します。同じデータベースを使用している場合、insertコマンドのselectコマンドによって作成された同じ接続を使用して間違っていると思いますか?そうでなければ、データベースの接続がどのように機能するのか分かりません。 :) – user990692

+0

@ user990692:ほとんどの状況で、すべてのコマンドに同じ接続を使用することがベストプラクティスです(トランザクションで実行している場合は、すべて同じ接続を使用することがほぼ確実です)。 –

0

それはSqlCommandコンストラクタで必要なパラメータだ、AFAIR InsertCommandは、あなたもInsertCommandを定義するため、この重複を必要としないselectコマンドから自動的に作成することができます。あなたはSelectCommandプロパティ を設定し、SqlCommandBuilderを使用している場合MSDN

から

主キー情報がDataSetに存在する場合、InsertCommandは を自動的に生成することができます。

+0

私はSqlCommandBuilderについて知っていますが、この場合、私は自分自身の挿入を作成する必要があります。私はselectコマンドで複数のテーブルを使用しています。私がしたのは、selectコマンドのConnectionプロパティをinsertコマンドのConnectionプロパティに割り当てることでした。私はこれが良いアプローチかどうかわからない – user990692

0

を使用すると、SelectCommandプロパティを設定し、SqlCommandBuilderを使用している場合、それはSqlDataAdapter

InsertCommandは、自動的に生成することができます述べています。

InsertCommandが以前に作成されたSqlCommandに割り当てられている場合、 SqlCommandは複製されません。 InsertCommandは、以前に作成されたSqlCommandオブジェクトの参照を に保持します。

Ecahコマンドオブジェクト。接続に関連付けられているため、操作を実行するコマンドオブジェクトに関する情報が必要なたびに必要です。

+0

私はそれを得る。しかし、私の問題はSqlCommandではなく接続です。アダプターを作成するときには、アダプターが使用する接続または接続ストリングを渡します。この後、私は、アダプタが参照先の接続を知っていると仮定します。 SqlDataAdapterコンストラクタを呼び出すときに既に作成されている場合は、なぜ新しい接続または接続を渡す必要があるのですか。ちょうど良い方法は、このようにそれをやってはいけないと言っている? – user990692

関連する問題