0

以下に示すように、現在、ID の配列の最初の要素に対する有効なクエリがあります。私がする必要があるのは、for ループを追加することです。そのため、配列内のすべての要素に対してクエリを再実行し、新しい行をそれぞれデータテーブルに追加しますが、これを行う方法がわかりません。配列のすべての ID を where 句に含める方法がない限り、最初の実行ですべての行を取得します。

PID[] は文字列配列であり、ランダム ID である 1 ~ 5 個の要素を持つことができます。

どんな助けでも大歓迎です!

        for loop here?

        string firstQuery = "select * from Property p " +
                            "where p.id in (@pID)";

        connString.Open();

        SqlCommand selectAll = new SqlCommand(firstQuery, connString);
        selectAll.Parameters.AddWithValue("@pID", PID[0]);
        SqlDataAdapter adapter = new SqlDataAdapter();
        adapter.SelectCommand = selectAll;
        DataSet ds = new DataSet();
        adapter.Fill(ds);
        connString.Close();
        DataTable table = ds.Tables[0];
4

1 に答える 1

4

はい、すべての ID を 1 つのパラメーターに含めて、それらに一致する結果を取得できます。

var parameters = new string[PID.Length];
var selectAll = new SqlCommand();

for (int i = 0; i < PID.Length; i++)
{
    parameters[i] = string.Format("@Age{0}", i);
    selectAll .Parameters.AddWithValue(parameters[i], PID[i]);
}

selectAll.CommandText = string.Format("SELECT * from Property p WHERE p.id IN ({0})", string.Join(", ", parameters));
selectAll.Connection = connString;

connString.Open();

SqlDataAdapter adapter = new SqlDataAdapter();
adapter.SelectCommand = selectAll;
DataSet ds = new DataSet();
adapter.Fill(ds);

connString.Close();
DataTable table = ds.Tables[0];
于 2013-05-24T19:10:45.660 に答える