2015-07-12 49 views
-1

如果manage_score返回true,则调用Update函数。 在Update中的这一行(System.Data.SqlClient.SqlDataReader oReader3 = cmd2.ExecuteReader()。我得到这个错误(已经有一个打开的DataReader与这个Command关联,它必须先关闭)。我已经删除了一些行使代码少长阅读 Manage_score:插入一个新的条目如果尚未有 更新:。正所谓条目是否已经存在,以及它在更新前做一些计算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