2016-07-12 1 views
0

私は、ユーザーが開いている形式を記録する約200台のマシンで簡単なプログラムを持っています。フォームが開かれるたびにSQL接続が開き、行が挿入され、接続が閉じられていると思いますか?私は接続プーリングがデフォルトでオンになっているので、実際には閉じていないと思いますか?私はWebサービスや潜在的なより良い方法を呼び出すことはできませんので、私の質問はなぜこのエラーであり、それを修正する方法があるのでしょうか?またはSQLの終わりに何か?多分私は変更しようとすることができます設定?多くのクライアントがテーブルに書き込もうとするとSQL Serverエラーが発生するのはなぜですか?

using (SqlConnection connection = new SqlConnection(connectionString)) 
     { 
      try 
      { 
       connection.Open(); 

       using (SqlCommand command = new SqlCommand(
       "INSERT INTO LoggerLoanForm VALUES(@Session, @Form, @DateStamp, @LoanNumber)", connection)) 
       { 
        command.Parameters.Add(new SqlParameter("Session", llf.SesssionId)); 
        command.Parameters.Add(new SqlParameter("Form", llf.Form)); 
        command.Parameters.Add(new SqlParameter("DateStamp", llf.DateStamp)); 
        command.Parameters.Add(new SqlParameter("LoanNumber", llf.LoanNumber)); 

        command.ExecuteNonQuery(); 
       } 


      } 
      catch (Exception ex) 
      { 
       AppInsightHelper.TrackException(ex); 
      } 
     } 

SQL Serverへの接続を確立する際に、ネットワーク関連またはインスタンス固有のエラーが発生しました。サーバーが見つからなかったか、アクセスできませんでした。インスタンス名が正しいこと、およびSQL Serverがリモート接続を許可するように構成されていることを確認します。 (プロバイダー:TCPプロバイダー、エラー:0 - 要求された名前は有効ですが、要求されたタイプのデータが見つかりませんでした。)要求された名前は有効ですが、要求されたタイプのデータは見つかりませんでした

ピーク時にはより多くのことが起こるので、SQLサーバーに十分なオープン接続や何かがないと思いますか?

+2

あなたはアプリのコードで接続プロパティを使用している - それは完了だとき 'using'ブロックは接続を閉じます。私は_server_側で[より多くの同時接続を許可する](http://stackoverflow.com/questions/1499718)に変更する必要があるか、または別の同時実行モデルを使用すると思われます。より深いネットワークの問題もあるかもしれませんが、実際に安いスイッチやルータがなければ、おそらく200人のユーザーしかいないようです。 –

+1

Googleの場合 - SQL Serverへの接続を断続的に確立する際にネットワーク関連またはインスタンス固有のエラーが発生しました - この問題を抱えている他のQが表示され、ネットワークのオーバーロードやファイアウォールなどについて多くの人が言いました – Cato

+1

それはSQLサーバーではなくネットワークです。接続が不足している場合、通常は接続がなくなったというメッセージが表示されます - 間欠的であると推測しています - エラーが発生してから100ms後にスリープした後、何度も何度も - それは助けてくれるでしょう – Cato

答えて

2

どのように再試行について

 const int max_try = 5; 

     int i = max_try; 

     while (i-- > 0) 
     { 
      using (SqlConnection connection = new SqlConnection(connectionString)) 
      { 
       try 
       { 
        connection.Open(); 

        using (SqlCommand command = new SqlCommand(
        "INSERT INTO LoggerLoanForm VALUES(@Session, @Form, @DateStamp, @LoanNumber)", connection)) 
        { 
         command.Parameters.Add(new SqlParameter("Session", llf.SesssionId)); 
         command.Parameters.Add(new SqlParameter("Form", llf.Form)); 
         command.Parameters.Add(new SqlParameter("DateStamp", llf.DateStamp)); 
         command.Parameters.Add(new SqlParameter("LoanNumber", llf.LoanNumber)); 

         command.ExecuteNonQuery(); 
         i = 0; 
        } 


       } 
       catch (Exception ex) 
       { 
        if (i == 0) 
          AppInsightHelper.TrackException(ex); 
         System.Threading.Thread.Sleep(50); 

       } 
      } 
     } 
+0

これは良いアイデアです。私は問題を抱えている場合、5回の再試行で十分でなければなりません。例外ログを確認して調べることができます – punkouter

関連する問題