在我的代码中,我一直在重复这样的代码块:
var returnData = MyDb.ExecuteDataSet(
MyDb.GetStoredProcCommand("MyTable_Insert", columnOne, columnTwo, columnThree),
transaction
);
var returnId = (int)returnData.Tables[0].Rows[0]["INSERTED_ID"];
在我看来,这似乎是一个相当大的代码块,要重复很多次,但我不知道如何将它概括为一个方法,因为每个存储过程的参数数量不同。
(对我而言)显而易见的解决方案是将我的参数传递给数组中的函数,然后将它们展开为 call GetStoredProcCommand
,但我找不到这样做的方法:
private int CallStoredProcedure(string procName, List<dynamic> parameterValues) {
..
MyDb.GetStoredProcCommand(procName, expand parameterValues);
// ERROR: Obviously "expand" doesn't exist
..
}
我可以使用冗长的方式来传递参数 using AddInParameter
,但是我需要将类型信息与参数值一起传递:
private int CallStoredProcedure(string procName, IDictionary<DbType, IDictionary<string, string>> paramsKeyValuesByType) {
..
MyDb.AddInParameter(myProcCommand, param.Value.Key, param.Key, param.Value.Value);
..
}
但随后我必须IDictionary
在调用该方法之前构造该对象,这比我最初调用该过程的方式更加冗长。
谁能想到一个优雅的解决方案?