2015-07-12 39 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