0

私は C# を使用DbCommandし、Oracle ストアド プロシージャを実行するためにインスタンス化します。

私の質問は次のとおりです。プロシージャは、db の on とは異なる名前付きパラメータを介して値を受け取るのはなぜですか?

にパラメータを追加するとdbCommand:

...
string value = "Whatever"

db.AddInParameter(dbCommand,"WrongParamName",DbType.String);
db.SetParameterValue(dbCommand, "WrongParamName", value); 

そして私は実行します:

dataSet = db.ExecuteDataSet(dbCommand);

dbCommandパラメータをストアド プロシージャ パラメータに正しく渡します。

  • 何故ですか?

  • 値のない最初のパラメーターに値を設定しますか、それとも位置に基づいていますか?

  • 位置に基づいている場合、なぜ名前が必要なのですか?

  • 開発者がコードを理解するのを助けるためだけの名前ですか?

4

2 に答える 2

1

「EXEC sp_StoredProcedure @Param1 = @Param1, @Param2 = @Param2」または「EXEC sp_StoredProcedure @Param1, @Param2」のようなストアド プロシージャを実行するかどうかを知る必要があります。最初のケースでは、sp 内のパラメーターの順序を変更しても、呼び出しは影響を受けません。一方、2 番目のケースでは、コマンドの最初のパラメーターが sp の最初のパラメーターを満たすため、2 番目から 2 番目までなどです。パラメータ名のリストを取得できない場合は、少なくとも他の開発者に順序を変更せず、ストアド プロシージャのパラメータ リストの最後にのみパラメータを追加するよう依頼することができます。これもできない場合は、それらを変更しないように祈るしかありません。いくつかのスクリプトでは、)。このコマンドは、通常の select ステートメントのように実行できます。

于 2016-12-22T07:59:58.627 に答える
0

さらに調査した結果、dbCommand は名前ではなく order でパラメーターを渡すdbCommandようです。

名前の目的はわかりませんでしたが、開発者がどのパラメーターがどれであるかを知るのに役立つだけです。

dbCommand設定するプロパティも見つかりませんでしたBindByName( のプロパティOracleCommand)。

于 2016-12-22T07:27:10.653 に答える