2010-09-29 145 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