2015-06-17 4 views
0

Я столкнулся с проблемой открытого соединения DataReader в ASP.NET C# При чтении записей из базы данных MySQL. Я не знаю, как в первый раз выполнения datareader он показывал мне открытую связь.Есть уже открытый DataReader, связанный с этим соединением, который должен быть закрыт первым?

ошибка, как показано ниже на DAL

MySqlDataReader reader = myCommand.ExecuteReader(); 

Существует уже открытая DataReader, связанные с этим соединением, которое должно быть закрыто первым

Пример кода

// BAL function call the DAL function 

MainFunction() 
{ 
... 
... 
    using (MySqlDataReader reader = clsDAL.GetALL(SqlQuery, Parms)) 
      { 
       while (reader.Read()) 
       { 
        clsVitalsDisplay obj = new clsVitalsDisplay(); 

        obj.BySessionId = Convert.ToInt32(reader["BySessionId"].ToString()); 
        obj.ByDevSessionId_LifeTouchHeartRate = Convert.ToInt32(reader["ByDevSessionId_LifeTouchHeartRate"].ToString()); 
        obj.HumanReadableDeviceId_LifeTouch = reader["HumanReadableDeviceId_LifeTouch"].ToString(); 

        listLifetouchHeartRate.Add(obj); 
       } 
      } 
} 

// Getting the Error while Read the details from database in DAL (Data Access Layer) class at MySqlDataReader reader = myCommand.ExecuteReader(); 

public static MySqlDataReader GetALL(String _query, MySqlParameter[] sqlParameter) 
    { 
     MySqlCommand myCommand = new MySqlCommand(); 

     try 
     { 
      myCommand.Connection = OpenConnection(); 
      myCommand.CommandText = _query; 
      myCommand.Parameters.AddRange(sqlParameter); 
      myAdapter.SelectCommand = myCommand; 
//Face the error at below line 
      MySqlDataReader reader = myCommand.ExecuteReader(); 
      myCommand.Dispose(); 
      return reader; 
     } 
     catch (MySqlException ex) 
     { 
      ErrorLog.ErrorLog.Log_Err("", ex, Global.gUserId.ToString()); 
      return null; 
     } 
     finally 
     { 

     } 
    } 
+0

ASP.NET и это исключение звучит подозрительно: http://stackoverflow.com/questions/9705637/executereader-requires-an-open-and-available-connection-the-connections-curren/9707060#9707060 Короче: trash 'clsDAL' и использовать' using'-statement. Я предполагаю, что ваша связь «статична», не так ли? –

+1

Вы не можете открыть более одного считывателя с тем же соединением. Вы не закрываете считыватель в любом месте этого кода. Я подозреваю, что функция OpenConnection() возвращает тот же экземпляр подключения. Вы должны закрыть читателя в конце вашего метода. Возможно, вы создаете его в некоторых предыдущих вызовах функций. – wonderbell

+0

Да, это STATIC-соединение, и я возвращаю тип функции id static MySqlDataReader. public static MySqlDataReader GetALL (String _query, MySqlParameter [] sqlParameter) Поэтому я не могу использовать использование - statemnet из-за типа возврата – skt

ответ

0

I устранили эту проблему, закрыв уже открытое подключение к базе данных, если открыто как показано ниже. После этого он работает отлично.

public static MySqlDataReader GetALL(String _query, MySqlParameter[] sqlParameter) 
    { 
     MySqlCommand myCommand = new MySqlCommand(); 

     try 
     { 
      if (con.State == ConnectionState.Open) 
       { 
       con.Close(); 
       } 

      myCommand.Connection = OpenConnection(); 
      myCommand.CommandText = _query; 
      myCommand.Parameters.AddRange(sqlParameter); 
      myAdapter.SelectCommand = myCommand; 

      MySqlDataReader reader = myCommand.ExecuteReader(); 
      myCommand.Dispose(); 
      return reader; 
     } 
     catch (MySqlException ex) 
     { 
      ErrorLog.ErrorLog.Log_Err("", ex, Global.gUserId.ToString()); 
      return null; 
     } 
     finally 
     { 

     } 
    }