2015-07-12 5 views
-1

if manage_score возвращает true, вызывается функция Update. На этой строке в Update (System.Data.SqlClient.SqlDataReader oReader3 = cmd2.ExecuteReader(). Я получаю эту ошибку (есть уже открытый DataReader, связанный с этой Командой, который должен быть закрыт первым.) Я удалил некоторые строки в сделать код менее долго читать Manage_score:. Вставьте новую запись уже если нет Update:.. называется, если запись уже есть, и это сделать некоторые расчеты перед обновлениемasp.net DataReader никогда не закрывается

Спасибо

public static bool manage_score(String City, String Street, String No, int Clean, int Fun, int Study, bool recommend) 
{ 
    System.Data.SqlClient.SqlConnection conn=null; 
    System.Data.SqlClient.SqlCommand cmd = null; ; 
    System.Data.SqlClient.SqlDataReader rdr=null; 
    bool needUpdate=false; 

    try 
    { 
     using(conn = new System.Data.SqlClient.SqlConnection(dbConn)) 
     { 

      using(cmd = new System.Data.SqlClient.SqlCommand(
      "Insert Into c_Show (Street,City,No,Count,Clean,Fun,Study,CleanScore,FunScore,StudyScore,Like_,Dislike) " + 
      "VALUES (@Street,@City,@No,'1',@Clean,@Fun,@Study,@Clean,@Fun,@Study,@Like,@DisLike)", conn)) 
      { 
       cmd.Parameters.Add("@No", System.Data.SqlDbType.Int).Value = No; 
       cmd.Parameters.Add("@City", System.Data.SqlDbType.Char).Value = City; 

       cmd.Connection.Open(); 
       using (rdr = cmd.ExecuteReader(System.Data.CommandBehavior.CloseConnection)) { } 
      } 
     } 
    } 
    catch (System.Data.SqlClient.SqlException ex) 
    { 
     if (ex.Number == 2627)// duplicate key 
     { 
      needUpdate=true; 
     } 
    } 
    catch (System.Exception ex) { } 

    return needUpdate; 
} 

static public void update(String City, String Street, String No, int Clean, int Fun, int Study, bool recommend) 
{ 
    using (System.Data.SqlClient.SqlConnection conn2 = new System.Data.SqlClient.SqlConnection(dbConn)) 
    { 
     String resCount = null; 
     String resClean = null; 
     String resFun = null; 
     String resStudy = null; 
     String resLike = null; 
     String resDislike = null; 

     using (System.Data.SqlClient.SqlCommand cmd2 = new System.Data.SqlClient.SqlCommand(
     "SELECT Street,City,No,Count,CleanScore,FunScore,StudyScore,Like_,Dislike FROM c_Show " + 
     "Where [email protected] and [email protected] and [email protected] ", conn2)) 
     { 
      cmd2.Parameters.Add("@No", System.Data.SqlDbType.Int).Value = No; 
      cmd2.Parameters.Add("@City", System.Data.SqlDbType.Char).Value = City; 
      cmd2.Parameters.Add("@Street", System.Data.SqlDbType.NVarChar).Value = Street; 
      cmd2.Connection.Open(); 
      cmd2.ExecuteReader(); 
      using (System.Data.SqlClient.SqlDataReader oReader3 = cmd2.ExecuteReader()) 
      {} 
     } 
    } 
} 

ответ

0

В соответствии с вашим кодом, вы ошибочно назовете cmd2.ExecuteReader().

 cmd2.ExecuteReader(); // once. You probably want to remove this one? 
     using (System.Data.SqlClient.SqlDataReader oReader3 = cmd2.ExecuteReader()) // twice 
     { 

Я думаю, что первый звонок является ошибкой. Удалите его, и все будет в порядке.

+0

Спасибо, arfff Я только что видел ошибку 1 мин назад. Длинный жаркий день программирования в моей маленькой комнате. –

+0

Да, тепло может заставить нас видеть вещи, или * не видеть вещи :) Не забудьте отметить ответ так, как принято, чтобы вопрос был помечен как разрешенный. – sstan

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