2017-03-13 13 views
-1

私は、mysqlデータベースに接続してデータベースに問い合わせるさまざまな関数を呼び出す関数を持っています。ここで私はどのように私のconn and cmdを再利用してコード内で効率を上げることができるか分からない。接続をValidation()に一度作成し、データベースに接続しようとしているところで他の機能でそれらを再利用します。以下は私がやっていることですmysqlデータベースへの接続と準備文の再利用

private static void Validation(List<Employee> EmpList, string Group) 
    { 
     ValidateName(EmpList, Group); 
     ValidateDept(EmpList, Group); 
    } 
    public static void ValidateName(List<Employee> EmpList, string Grp) 
    { 
     var connStr = ConfigurationManager.ConnectionStrings["MyConnectionString"].ConnectionString; 

     string selectQuery; 

     for (int i = 0; i < EmpList.Count; i++) 
     { 
      selectQuery = "Select Name from Employee where Group = @Group AND @Name in (FirstName, LastName);"; 
      using (MySqlConnection conn = new MySqlConnection(connStr)) 
      using (MySqlCommand cmd = new MySqlCommand(selectQuery, conn)) 
      { 
       cmd.Parameters.Add("@Group", MySqlDbType.VarChar).Value = Grp; 
       cmd.Parameters.Add("@Name", MySqlDbType.VarChar).Value = EmpList[i].Name; 
       conn.Open(); 
       var reader = cmd.ExecuteReader(); 
       List<string> lineList = new List<string>(); 
       while (reader.Read()) 
       { 
        lineList.Add(reader.GetString(0)); 
       } 
       if (lineList.Count <=0) 
       { 
        WriteValidationFailure(EmpList[i], "Failed"); 
       } 
       conn.Close(); 
     }  
     } 
    } 

    public static void ValidateBreedingDept(List<Employee> EmpList, string Grp) 
    { 
     var connStr = ConfigurationManager.ConnectionStrings["MyConnectionString"].ConnectionString; 

     string selectQuery; 

     for (int i = 0; i < EmpList.Count; i++) 
     { 
      selectQuery = "Select DepartmentName from Department where Group = @Group AND DepartmentName = @Dept;"; 
      using (MySqlConnection conn = new MySqlConnection(connStr)) 
      using (MySqlCommand cmd = new MySqlCommand(selectQuery, conn)) 
      { 
       cmd.Parameters.Add("@Group", MySqlDbType.VarChar).Value = Grp; 
       cmd.Parameters.Add("@Dept", MySqlDbType.VarChar).Value = EmpList[i].Dept; 
       conn.Open(); 
       var reader = cmd.ExecuteReader(); 
       List<string> lineList = new List<string>(); 
       while (reader.Read()) 
       { 
        lineList.Add(reader.GetString(0)); 
       } 
       if (lineList.Count <= 0) 
       { 
        WriteValidationFailure(listOfMouse[i], "Failed"); 
       } 
       conn.Close(); 
      } 
     } 
    } 

私はデータベースに接続し、C#から質問しています。また、Prepareステートメントを使用するようにクエリを書き換える方法もあります。私はcmd.Prepare()を使うことができると理解していますが、ある関数のパラメータを別の関数に再利用することはできますか?

答えて

1

「私CONNを再利用し、コード内でより効率を作るためにcmdを」あなたはそのことについて心配する必要はありません

。 C#は接続プールと呼ばれるものを使って処理します。

すべての接続は、本当に基本的な接続を閉じるのではなく、あなたが

Read more on MSDN

をやろうとしている正確に何をしている後で使用するために接続プールに返さない「閉じました」
関連する問題