1

ハードコーディングせずにすべてのパラメータの値を渡すことは可能SqlCommandですか?

これの代わりに:

mySqlCommand1.Parameters.AddWithValue("@Parameter1", "sameValue");
mySqlCommand2.Parameters.AddWithValue("@Parameter2", "sameValue");
mySqlCommand2.Parameters.AddWithValue("@Parameter2", "sameValue");
...

私はこのようなものが欲しい:

foreach (SqlParameter parameter in mySqlCommand1.Parameters)
{
    parameter.Value = someValue;  
}

しかし、私はエラーが発生します:

プロシージャまたは関数には、指定されていないパラメータが必要です

4

2 に答える 2

1

はい、これを行うことができます -最初にコレクションにパラメータを追加する場合:.Parameters

mySqlCommand1.Parameters.Add("@Parameter1", SqlDbType.Int);
mySqlCommand1.Parameters.Add("@Parameter2", SqlDbType.VarChar, 50);
...

次に、それらを反復して値を割り当てることができます。

foreach (SqlParameter parameter in mySqlCommand1.Parameters)
{
    parameter.Value = someValue;  
}

.Parametersこれらのパラメーターをコレクションに追加しなかった場合、反復して値を割り当てるものは何もありません.....

更新:を避けたい場合は@Parameter1、次のようなものを使用します。

foreach (SqlParameter parameter in mySqlCommand1.Parameters)
{
    if(parameter.ParameterName != "@Parameter1") 
    { 
        parameter.Value = someValue;  
    }
} 
于 2013-08-17T19:33:51.697 に答える
0

それには疑問があります - 値は実際に変化しますか?

  • そうでない場合は、ストアド プロシージャを変更して 1 つのパラメーターのみを受け入れ、それを内部的に伝達することができます。
  • その場合は、次の例のように、オプションのパラメーターを受け入れるようにプロシージャを変更できます。

    CREATE PROCEDURE MyProcName
        @Parameter1 VARCHAR (100) = '1',
        @Parameter2 VARCHAR (100) = 'StringValue',
        @Parameter3 VARCHAR (100) = NULL
    AS [...]
    

オプションのパラメーターを実装する場合、それ以上の値について言及する必要はありません。デフォルトを想定できます。そうすれば、クライアント コードを合理化できます。

于 2013-08-17T19:00:41.513 に答える