1

私はこの答えに従った、

List<int> を SQL パラメータに指定するにはどうすればよいですか?

シナリオを理解するために、私のこれらの質問を参照してください。

c#の単一のSQLクエリでリストオブフルーツのクレートIDを更新するにはどうすればよいですか

SQL テーブル ロジックを更新する方法

私が試していて機能していないこと

private void relate_fruit_crate(List<string> selectedFruitIDs, int selectedCrateID)
{
    string updateStatement = "UPDATE relate_fruit_crate set CrateID = @selectedCrateID where FruitID = @selectedFruitIDs";

    using (SqlConnection connection = new SqlConnection(ConnectionString()))
    using (SqlCommand cmd = new SqlCommand(updateStatement, connection))
    {
        connection.Open();
        cmd.Parameters.Add(new SqlParameter("@selectedCrateID", selectedCrateID.ToString()));
        cmd.Parameters.Add(new SqlParameter("@selectedFruitIDs", String.Join(",",selectedFruitIDs.ToArray())));

        cmd.ExecuteNonQuery();
    }
}

私のコードはエラーなしで実行され、

4

2 に答える 2

1

複数値パラメーター クエリは、TSQL では少し面倒です。テーブル値パラメーターや「分割」UDF などのオプションがありますが、それ以外の場合は...少し注意が必要です。(データに応じて) 複数のパラメーターを追加し、クエリを変更する必要があります。私が提案するなら...「dapper」のようなライブラリがここで役立つかもしれません-これは、次のようなシナリオを簡単にするように設計されています:

using Dapper; // at the top of your code file, to enable dapper
...
private void relate_fruit_crate(List<string> selectedFruitIDs, int selectedCrateID)
{
    // note the slightly unusual "in" here (no paranethesis) - that is because
    // dapper is going to do some voodoo...    
    using (SqlConnection connection = new SqlConnection(ConnectionString()))
    {
        connection.Open();
        connection.Execute(
            "UPDATE relate_fruit_crate set CrateID = @selectedCrateID where FruitID in @selectedFruitIDs",
            new { selectedFruitIDs, selectedCrateID });
    }
}

ここで「dapper」は、複数のパラメーターを使用してそれを表現する方法を見つけ出しin、正しい数のパラメーターを追加するすべての作業を行います。また、はるかに簡単です (特に、コマンドとパラメーターで行った作業がいかに少ないかを見てください。リーダーも適切に処理されます)。

Dapper はNuGet から無料で入手できます

于 2013-05-14T11:14:35.060 に答える