3

私のコードでは、このようなコードブロックを常に繰り返しています。

var returnData = MyDb.ExecuteDataSet(
    MyDb.GetStoredProcCommand("MyTable_Insert", columnOne, columnTwo, columnThree),
    transaction
);

var returnId = (int)returnData.Tables[0].Rows[0]["INSERTED_ID"];

これは、何度も繰り返されるかなり大きなコードブロックのように見えますが、引数の数がストアドプロシージャごとに異なるため、メソッドに一般化する方法を理解できません。

(私にとって)明らかな解決策は、パラメーターを配列内の関数に渡してから、それらを展開して呼び出すGetStoredProcCommandことですが、これを行う方法が見つかりません。

private int CallStoredProcedure(string procName, List<dynamic> parameterValues) {
    ..
    MyDb.GetStoredProcCommand(procName, expand parameterValues);
    // ERROR: Obviously "expand" doesn't exist
    ..
}

を使用してパラメータを渡すより長い方法を使用することもできますがAddInParameter、その場合は、パラメータ値とともに型情報を渡す必要があります。

private int CallStoredProcedure(string procName, IDictionary<DbType, IDictionary<string, string>> paramsKeyValuesByType) {
    ..
    MyDb.AddInParameter(myProcCommand, param.Value.Key, param.Key, param.Value.Value);
    ..
}

ただしIDictionary、メソッドを呼び出す前にオブジェクトを作成する必要があります。これは、最初にプロシージャを呼び出していた方法よりもさらに時間がかかります。

誰もがこれに対するエレガントな解決策を考えることができますか?

4

1 に答える 1

4

params次のキーワードを使用できます。

private int CallStoredProcedure(string procName, params object[] parameterValues) {
    ..
    MyDb.GetStoredProcCommand(procName, parameterValues);
    ..
}
于 2012-10-16T13:37:01.367 に答える