2012-05-03 11 views
1

私は名前付きパイプを開き、クライアントが送信するデータを収集するC#サーバーを作成しています。基本的には、収集された情報を.NET MySql ConnectorとMySqlConnectionクラスを使用してmysqlデータベースに格納しています。また、フォールバックルールを追加しました。これは、DBが手の届かないところにある場合、クライアントから送信された情報をSQLファイルにバッファリングし、再び使用可能になった時点でDBにインポートします。 DBが完全になくなった場合(たとえば、DBを実行しているサーバーがクラッシュしたためにネットワークに接続されていないなど)を除いて、Connect()メソッドは例外をスローします。クライアントが多くのデータを送信するため、これは容認できません。これを修正する方法はありますか?テーブルが存在しないなどの理由でクエリが失敗した場合は、すぐにエラーが返されます。MySqlConnection Connect()メソッドは、DBがなくなったときに例外をスローするのが非常に遅いC#

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using log4net; 
using MySql.Data.MySqlClient; 

namespace PipeServer 
{ 
    class MySqlConnector 
    { 
     //register logger 
     private static readonly ILog log = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType); 

     public delegate void MessageReceivedHandler(string message); 
     public event MessageReceivedHandler MessageReceived; 

     private string host; 
     private string database; 
     private string user; 
     private string password; 
     private MySqlConnection connection; 
     private List<string> rows = new List<string>(); 



     public MySqlConnector() 
     { 
      this.host = Settings.Default.db_host; 
      this.database = Settings.Default.db_schema; 
      this.user = Settings.Default.db_user; 
      this.password = Settings.Default.db_pw; 
      string myConnectionString = "SERVER=" + this.host + ";" + 
         "DATABASE=" + this.database + ";" + 
         "UID=" + this.user + ";" + 
         "PASSWORD=" + this.password + ";"; 

      connection = new MySqlConnection(myConnectionString); 




     } 

     public bool Connect() 
     { 
      if (connection.State != System.Data.ConnectionState.Open) 
      { 
       try 
       { 
        connection.Open(); 
        this.MessageReceived("Connected to Database"); 
        return true; 
       } 
       catch (MySqlException ex) 
       { 
        log.Error("failed to connect! mysql error: " + ex); 
        this.MessageReceived("No Database connection - Error: "+ex); 
        return false; 
       } 

      } 
      else 
      { 
       this.MessageReceived("Connected to Database"); 
       return true; 
      } 

     } 
     . 
     . 
     . 
    } 
} 

いずれのヒントも高く評価されています。ありがとうございます!

答えて

3

あなたは永遠に30というような意味をしていますか?

おそらく、ConnectionStringにTimeOut設定を追加しようとしています。

http://www.connectionstrings.com/mysql

+0

おかげで、あなたは男です!:) – user871784

+0

あなたは非常にウェルカムだ:) – ykatchou

関連する問題