while (reader.Read())
                {
                    //
                    MessageBox.Show(Convert.ToString(reader["id"]));                    string citystr, sc, ec, dates;
                    citystr = Convert.ToString(reader["city"]);
                    dates = Convert.ToString(reader["dates"]);
                    dates = dates.Trim();
                    sc = citystr.Substring(0, 3);
                    ec = citystr.Substring(3, 3);
                    int did;
                    did = Convert.ToInt32(reader["id"]);
                    //MessageBox.Show("qqqq"+reader["city"]);
                                        
                  SqlCommand command = objConnection.CreateCommand();                  command.CommandText = "update newft set tip=tip+1 where id=" + did + "";
                  command.ExecuteNonQuery();
                }
                reader.Close();
上面的代码.只要                  SqlCommand command = objConnection.CreateCommand();                  command.CommandText = "update newft set tip=tip+1 where id=" + did + "";
                  command.ExecuteNonQuery();
 
这三句加上就会出错.提示 已有打开的与此命令相关联的 DataReader,必须首先将它关闭我要实现的是读完一条数据马上更新他的tip值,有的说是要关闭DataReader.在我的代码要怎么样关闭??.请教各位!!!

解决方案 »

  1.   


    SqlCommand command = objConnection.CreateCommand();
    command.CommandText = "update newft set tip=tip+1 where id=" + did + "";
    command.ExecuteNonQuery();
    command.Close();这样吗
      

  2.   

    问题关键在你的objConnection.CreateCommand()方法里, 该方法需要返回一个新的SqlCommand对象,而不以前的那个
      

  3.   

    另外你的这个代码效率不高,建议用一个SQL完成Select和Update动作,这样之用执行一个数据库操作
      

  4.   

    谢谢各位提醒.
    SqlCommand command = objConnection.CreateCommand();
    改成
    SqlCommand command = objConnection2.CreateCommand();
    再创建一个连接就可以了.
      

  5.   

    另外你的这个代码效率不高,建议用一个SQL完成Select和Update动作,这样之用执行一个数据库操作
    --------------------------------------------------------------------------------谢谢 possible_Y ,不太明白.能举例讲一下吗?
      

  6.   

    比如我要Update数据库表Table1中所有age大于30的人的性别都为M一条SQL:
    UPDATE Table1 SET Sex = 'M' FROM (SELECT Table1 WHERE Age > 30)
    这样只需要和数据库建立一次连接, 剩下工作都是数据库里执行了如果按你的做法, 先捞出数据库Table1里的所有age大于30的人, 获取数据到应用程序这边, 然后循环, 每次又连接数据库执行Update, 这样的效率不算低么?
      

  7.   

    应该是设计思路的问题
    楼上的方法是正确的,使用sql来解决
      

  8.   

    一个sqldatareader只能关联一个sqlconnection的