2011-12-16 12 views
4

私はStoredProcedureのすべてのパラメータのDefaultValueを取得しようとしています。私のアプリケーションは、C#.NETでビルドされ、Microsoft SQL 2008データベースにアクセスします。SMOでSQLストアドプロシージャパラメータをより効率的に取得するにはどうすればよいですか?

私は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); 
     } 

しかし、これは私が(〜10倍改善有意な改善を行いました)svr.SetDefaultInitFieldsの最適化を追加した後でも、非常に遅いです。

誰かがさらに最適化のアイディアを得ましたか?

+1

これを実行している他の貧しい人々には、StoredProcedure sp = svr.Databases ["MyDatabase"]。UserDefinedFunctions – tbone

答えて

2

私はsmiliar問題を抱えていたし、それは方法高速ですあなたが使用している場合...

svr.SetDefaultInitFields(typeof(StoredProcedure), false) 

ことがわかりました。私はそれが実際にすべてをフェッチする他のオプションでasumingだけど、あなたがそれをオフにして、ただあなたのparamsを得るなら、スピードの増加は巨大です。私の場合、5秒から6秒の間に10秒間、0.5秒間待機します。まだ完璧ではありませんが、住みやすいです。

これで遊んで以来EDIT

はもう少し私がtypeof(StoredProcedure)レベルappraochが最適に動作していることが分かりました。 typeof(StoreedProcedureParameter)オプションを使用した私のテストでは、typeof(StoredProcedure)バージョンの0.5秒と比較して1.5秒ほど安定していました。

なぜ誰かに教えてもらえれば興味がありますか?

関連する問題