我正在尝试开发一种方法来动态地将方法从我的C#.NET应用程序分派到数据库存储过程。我已经有一个方法来调用存储过程,该存储过程接受过程名称和参数的Hashtable。我希望能够从我的应用程序中的任何其他方法调用该方法,所以我构建了以下内容(其中ParameterMap是存储过程参数名称的静态Hashtable:
public Foo DoSomething(int x, int y)
{
var mb = MethodBase.GetCurrentMethod();
var parameters = new Hashtable();
foreach (var pi in mb.GetParameters())
{
var storedProcMethodName = (ArrayList)ParameterMap[mb.Name];
var storedProcParameterName = storedProcMethodName[pi.Position];
parameters.Add(storedProcParameterName, ???);
}
return (Foo)
CallDatabaseMemberFunction("GET", parameters, typeof(Foo));
}
我要替换???使用x和y中的参数值,按位置访问它们,从而将存储过程参数名称映射到此方法的参数值。任何其他解决这个问题的方法也会受到欢迎。
答案 0 :(得分:1)
您无法以这种方式检索参数值,至少不能在.NET中检索。
您必须明确写出代码(我已将作业删除到storedProcMethodName
,因为您没有在任何地方使用它):
public Foo DoSomething(int x, int y)
{
var mb = MethodBase.GetCurrentMethod();
var parameters = new Hashtable();
parameters.Add("x", x);
parameters.Add("y", y);
return (Foo)
CallDatabaseMemberFunction("GET", parameters, typeof(Foo));
}
如果您经常需要这样,您应该考虑编写一个自动生成此代码的工具。我所知道的所有SQL层(IQToolkit,SubSonic,LINQ-to-SQL)都是这样做的。