2011-10-27 8 views

答えて

2

最初のこと:接続文字列にタイムアウトを追加しても問題は解決しません。

回避策:EL 5.0のソースコードを変更して、新しいカスタムDLLを生成することができます。で... \ EntLib50Src \ブロック\データ\ SRC \データ\ SprocAccessor.cs

    • 方法
    • (...)を実行中だけリターンする前にこのコードを追加します。command.CommandTimeout = 120 ; // 2分
    • コンパイルとあなたが見つけることができる新しいMicrosoft.Practices.EnterpriseLibrary.Data.dllを使用して... \ EntLib50Src \ブロック\ binに\デバッグ
  • 0

    は実際に、私はノーあると思いますあなた自身のELのコピーを持っている必要があります。そのまま元ELのバイナリを保つために、あなただけのフォローを行うことができます。SprocAccessorクラス

  • から

    • 継承は、()メソッドを実行し上書きSprocAccessor.Execute(のように、ここで同じコードを置く)が、追加しますタイムアウト一部
    • この変数がプライベートであるとして、あなたはこのようないくつかのこと

    SprocAccessorクラスに(あなたの新しいクラスで)ローカル変数に保つためにもPROCEDURENAMEが必要になります。

    public class SprocAccessorWithTimeout<T> : SprocAccessor<T> 
    { 
        readonly string procedureName; 
    
        public SprocAccessorWithTimeout(Database database, string procedureName, IRowMapper<T> rowMapper) : base(database, procedureName, rowMapper) 
        { 
         this.procedureName = procedureName; 
        } 
         public override IEnumerable<T> Execute(params object[] parameterValues) 
         { 
          using (var command = Database.GetStoredProcCommand(this. procedureName)) 
          { 
         command.CommandTimeout = MaxSpExecutionTimeout; 
    
           if (parameterValues.Length > 0) 
           { 
            Database.AssignParameters(command, parameterValues); 
           } 
    
           return base.Execute(command); 
          } 
         } 
        } 
    
  • 関連する問題