2011-12-16 60 views
4

我試圖檢索StoredProcedure中所有參數的DefaultValue。我的應用程序使用C#.NET構建,訪問Microsoft SQL 2008數據庫。如何更有效地檢索SQL存儲過程參數與SMO?

我使用SqlCommandBuilder.DeriveParameters獲取大部分參數信息,但是它不會返回參數的「DefaultValue」,所以我使用SMO來獲取該特定屬性。

這裏是我當前的代碼:

 Server svr = new Server(new ServerConnection(new SqlConnection(ConfigurationManager.ConnectionStrings["MyConnectionString"].ConnectionString))); 
     StoredProcedure sp = svr.Databases["MyDatabase"].StoredProcedures["mySproc", "myScheme"]; 
     svr.SetDefaultInitFields(typeof(StoredProcedureParameter), "Name"); 
     svr.SetDefaultInitFields(typeof(StoredProcedureParameter), "DefaultValue"); 

     Dictionary<string, string> defaultValueLookup = new Dictionary<string, string>(); 
     foreach (StoredProcedureParameter parameter in sp.Parameters) 
     { 
      string defaultValue = parameter.DefaultValue; 
      string parameterName = parameter.Name; 
      defaultValueLookup.Add(parameterName, defaultValue); 
     } 

然而,這是即使我加入了svr.SetDefaultInitFields優化(這並作出顯著改善〜10倍的改善)非常緩慢。

有沒有人有進一步的優化思路?

+1

只要注意任何其他可憐的靈魂誰發現自己這樣做,函數可以在這裏找到:StoredProcedure sp = svr.Databases [「MyDatabase」]。UserDefinedFunctions – tbone 2015-08-20 22:42:34

回答

2

我有一個smiliar問題,並發現,如果你使用...

svr.SetDefaultInitFields(typeof(StoredProcedure), false) 

這是方式更快。我認爲,與其他任何選項,它實際上提取一切,但如果你關掉它,然後只是得到你的參數速度增加是巨大的。我的時間從5-6秒到0.5秒爲10個參數sp。仍然不完美,但宜居。

編輯

因爲玩這個多一點我發現typeof(StoredProcedure)水平appraoch達到最好效果。在我的測試中,使用typeof(StoreedProcedureParameter)選項的測試一直持續1.5秒左右,與typeof(StoredProcedure)版本的0.5秒左右持平。

如果有人能告訴我爲什麼我會感興趣?