2015-02-11 3 views
-1

ОшибкиОшибка - System.InvalidOperationException: Существует уже открытая DataReader, связанная с этой командой, которая должна быть закрыта первой

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

приходит всякий раз, когда я запускаю приведенный ниже код

  string btnString = @"SELECT FacultyName, Office, Phone, College, Title, Email FROM FACULTY WHERE FacultyName LIKE @name"; 

      SqlCommand sc = new SqlCommand(); 
      SqlDataReader sr; 

      sc.Connection = (SqlConnection)Application["sqlConn"]; 
      sc.CommandType = CommandType.Text; 
      sc.CommandText = btnString; 
      sc.Parameters.Add("@name", SqlDbType.Char).Value = ddlFacultyName.Text; 
      string strName = ShowFaculty(ddlFacultyName.Text); 
      sr = sc.ExecuteReader(); 

      if (sr.HasRows == true) 
       FillFacultyReader(sr); 
      else 
       Response.Write("<script>alert('No match found!')</script>"); 

      sr.Close(); 
      sc.Dispose(); 

отображается ошибка в

sr = sc.ExecuteReader(); 

Любая помощь будет оценена по достоинству.

+0

Я вижу связь кэшируются (в состоянии сеанса), это может быть, что читатель был открыт на этой связи, но не закрыта до выше код называется? –

+0

@neds Вы пробовали метод, который я разместил ниже? Если он решит проблему, не могли бы вы пометить ее как ответ? Спасибо заранее ... –

+0

@Murat Я попробовал метод, который вы опубликовали, и он не работал. Я все равно получаю ту же ошибку. – neds

ответ

0

Можете ли вы поделиться всем этим методом, я думаю, что вы используете этот кодовый блок для, foreach или во время повторения. И еще одно: вы открыли соединение перед командой «sc.ExecuteReader()». скорее всего, вы используете повторение, тогда вы получите эту ошибку. Если вы публикуете весь метод, я могу попытаться помочь больше.

1

Лучше будет изменить свой код, как этот

using(SqlConnection con=new SqlConnection("constr")) 
{ 
    using(SqlCommand com=new SqlCommand ("sp",con)) 
    { 


    } 

} 
0

Это происходит, когда у вас уже есть DataAdapter или ExecuteScalar открытый с той же связи над этим кодом. Есть два варианта этого: 1. Возьмите этот код выше блока кода DataAdapter и сохранить его в отдельном

try 
{ 
conn.open(); 
//Your code here 

} 
catch (Exception ex) 
{ 
//exception handling 
} 
finally 
{ 
conn.close(); 
} 

или как заявлено Ganesh_Devlekar. Также не забудьте закрыть свой DataReader 2. определить одно и то же соединение в другом типе sqlConnection. То есть: , если у вас есть подключение как

SqlConnection conn = New SqlConnection("your_connectionString"); 
//create another SqlConection variable 
SqlConnection conn1 = New SqlConnection("your_connectionString"); 
//Use Conn1 for SqlDataReader 
0

Вы пытались добавить MultipleActiveResultSets = истина; в строку подключения, как показано ниже?

<add name="EFDbContext" providerName="System.Data.SqlClient" connectionString="Data Source=XXXX; 
Initial Catalog=XXXX; Integrated Security=True; MultipleActiveResultSets=True;" /> 


Update: В вашем случае, вы можете также попытаться закрыть соединение, добавив следующую строку после sr.Close(); линия:

sc.Connection.Close(); 
Смежные вопросы

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