2010-09-29 136 views
0

我正试图开发一种方法来动态地从我的C#.NET应用程序分派一个方法到数据库存储过程。我已经有一个方法来调用接受过程名称和参数散列表的存储过程。我希望能够调用任何其他方法,这个方法在我的应用程序,所以我已经建立了以下(其中parameterMap的是存储过程的参数名称的静态哈希表:按位置访问参数值?

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中的参数值,按位置访问它们,从而将存储过程参数名称映射到此方法的参数值。对此问题的任何其他方法也将受到欢迎。

回答

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)都这样做。

+0

我担心这可能是真的。谢谢。 – 2010-09-29 16:01:14