2013-06-02 4 views
0

Это мой код для выбора данных из таблицы в MySql:MySqlDataReader тесная связь

  MySqlDataReader msdr; 

      MySqlConnection connect = new MySqlConnection(connectionStringMySql); 
      MySqlCommand cmd = new MySqlCommand(); 

      string commandLine = "SELECT id,token FROM Table WHERE id = @id AND token = @token;"; 

      cmd.CommandText = commandLine; 

      cmd.Parameters.AddWithValue("@id", id); 
      cmd.Parameters.AddWithValue("@token", token); 

      cmd.Connection = connect; 
      cmd.Connection.Open(); 

      msdr = cmd.ExecuteReader(); 

      //do stuff..... 

      msdr.Close(); 
      cmd.Connection.Close(); 

Как вы можете видеть, я закрыть два:

 msdr.Close(); 
     cmd.Connection.Close(); 

И я хочу спросить, если мне нужно закрыть это два? или это будет нормально закрыта только cmd.Connection.Close();

Причины я спросил его, потому что иногда я получаю эту ошибку, когда я пытаюсь выбрать данные в таблице: Details: MySql.Data.MySqlClient.MySqlException: Too many connections

И я хочу знать, если это потому, что я не закрывайте эти соединения.

ответ

4

Лучшее кодирование для этого следующего

using(MySqlConnection connect = new MySqlConnection(connectionStringMySql)) 
using(MySqlCommand cmd = new MySqlCommand()) 
{ 
    string commandLine = "SELECT id,token FROM Table WHERE id = @id AND token = @token;"; 
    cmd.CommandText = commandLine; 

    cmd.Parameters.AddWithValue("@id", id); 
    cmd.Parameters.AddWithValue("@token", token); 

    cmd.Connection = connect; 
    cmd.Connection.Open(); 

    using(msdr = cmd.ExecuteReader()) 
    { 

     //do stuff..... 
    } // <- here the DataReader is closed and disposed. 

} // <- here at the closing brace the connection is closed and disposed as well the command 

using statement будет держать ваше соединение закрыто и утилизировано, а также объект команды. Нет необходимости явно вызывать Close на MySqlConnection или MySqlDataReader, потому что оператор using сделает это для вас ТАКЖЕ в случае, если в вашем коде произошли исключения, вызванные открытием и закрытием соединения.

В вашем исходном коде достаточно закройте соединение только один раз с помощью команды, datareader или самого соединения, потому что они работают с одним и тем же экземпляром объекта, но если у вас есть исключение, то ваш код не сможет закрыть соединение и, таким образом, вы рискуете «слишком много подключений», Задача

0

Если вы используете этот код в методе, лучше закрыть устройство для чтения данных, а также соединение для передачи данных

Смежные вопросы