在C#中使用可变数量的参数调用GetStoredProcCommand?

时间:2012-10-16 13:34:55

标签: c# .net arguments enterprise-library system.data

在我的代码中,我一直在重复这样的代码块:

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对象,这比我最初调用该过程的方式更加冗长。

有人能想到一个优雅的解决方案吗?

1 个答案:

答案 0 :(得分:4)

您可以使用params关键字:

private int CallStoredProcedure(string procName, params object[] parameterValues) {
    ..
    MyDb.GetStoredProcCommand(procName, parameterValues);
    ..
}