0

次の選択コマンドを使用して、データセットにテーブルアダプターを作成しました

select count(*) as cuenta from table1.

しかし、ランタイムでは、さまざまな数の句を使用してさまざまな選択を作成する必要があります。同じ tableadapter を使用したいのですが、選択コマンドを変更できません。

これは私の問題の小さな例です:

DataSource "ds" の dataadapter "EXISTE" の元の選択コマンド:

select 1 as cuenta(*)

デザイナーで、dataadapter をドロップしてフォームにインスタンスを作成します: "EXISTE1"

コード:

EXISTE1.Adapter.SelectCommand = new System.Data.SqlClient.SqlCommand("select 2255 as cuenta");
EXISTE1.Fill(ds.EXISTE);

しかし、2255 ではなく、結果として常に「1」が返されます。

新しい Fill 関数を作成せずに他のコマンドを実行するにはどうすればよいですか?

よろしくお願いします

4

2 に答える 2

0

この問題の解決策は、TableAdapter ではなく Adapter からデータセットを埋めることです。これは私にとってはうまくいっています。

EXISTE1.Adapter.SelectCommand = new System.Data.SqlClient.SqlCommand("select 2255 as cuenta");
EXISTE1.Adapter.Fill(ds.EXISTE);
于 2020-05-10T09:42:55.987 に答える
0

デザイナーで右クリックして「クエリの追加」を選択することで、テーブルアダプターにさらにクエリを追加することになっていますが、投稿されたクエリから、選択する選択クエリを実行するよりも、値 2255 をデータテーブルに挿入する方が簡単です。単一の定数。

myDataset.EXISTE.AddEXISTERow(2255);

designer.cs を見ると、TA が認識している複数のクエリがコレクションに保持されており、関連するクエリがすべての入力の前に select コマンドに読み込まれていることがわかります。これは、努力が効果がない理由を説明しています。入力すると、新しい選択コマンドが上書きされます

事前にスクリプトを作成できない方法でクエリが本当に動的である場合は、動的に構築されたコマンドとカスタム パラメーター セットを使用して通常の DataAdapter を使用して、テーブルを埋めるのが最も適切な場合があります。これをコードとして tableadapter に追加し、デザイナーで tableadapter をダブルクリックしてコード ビハインドを開き (デザイナーは部分クラスを作成するため、簡単に拡張できます)、次のようなものを追加できます。

void FillByVariable(EXISTEDataTable dt, string sql, Dictionary<string,object> p){
  using(var da = new XxxDataAdapter(sql, this.Connection.ConnectionString) //new da that uses the same conn as the TA
  {
    foreach(var kvp in p)
      da.SelectCommand.Parameters.AddWithValue(kvp.Key, kvp.Value); //demo code, read Joel's "can we stop using AddWithValue" blog and make something better if you use sql server
  }
  da.Fill(dt)
}
于 2020-09-16T05:35:56.647 に答える