2011-05-26 4 views
0

エンタープライズライブラリデータアクセスアプリケーションブロックを頻繁に使用するASP.NET 2.0アプリケーションがあります。要するに、SPの名前とともにSPのパラメータの配列を受け入れ、そのSPを呼び出すヘルパールーチンがあります。だから、効果的エンタープライズデータアプリケーションブロック、ストアドプロシージャおよび既定値を持つパラメータ

object[] parameters = string.IsNullOrEmpty(paramsString) ? null : jss.Deserialize<object[]>(paramsString); 

DbCommand procProcess = Database.GetStoredProcCommand(_storedProc, parameters); 

また、パラメータのデフォルト値に依存しているストアドプロシージャの多くを持っています。私はただのparam1とPARAM2に値を渡すことで、PROCを呼び出すことができるようにしたい、そのような

CREATE PROCEDURE MyProc 
@param1 int 
,@param2 int 
,@param3 int = 0 
AS 
.... 

として通常デフォルト値を持つこれらのパラメータは、ストアドプロシージャ定義の最後に常にあります。しかし、私のパラメータは2つだけのparams、このコールを持っているofcourseの場合

DbCommand procProcess = Database.GetStoredProcCommand(_storedProc, parameters); 

まだparam3を取り戻すだろうが、それにそのデフォルト値を割り当てることはありません。よって、

procProcess.ExecuteNonQuery(); 

は失敗します。

誰でも私がデフォルト値を指定してこれらのパラメータを省略したり、SQLに相当するキーワード「default」を何らかの形で渡すことができますか?

答えて

0

私はこれを自分で解決しました。基本的に私はその後

DbCommand procProcess = Database.GetStoredProcCommand(_storedProc, parameters); 

コールまたは単にのparamの名前とその値を示していますカスタムクラスの配列の直列化表現を受け入れるに渡されるパラメータのオブジェクト配列のいずれかを受け入れるようにコードをリファクタリング。コードは、次に、カスタムクラスの配列を渡してこれを逆シリアル化して、何かを実行します。

DbCommand procProcess = Database.GetStoredProcCommand(_storedProc); 

        for (int i = 0; i < typedparams.Length; i++) 
         procProcess.Parameters.Add(new SqlParameter(typedparams[i].ParamName.StartsWith("\\@") ? typedparams[i].ParamName : "@" + typedparams[i].ParamName, typedparams[i].ParamValue)); 
関連する問題