<script language="C#" type="text/C#" runat="server"> 
    private void page_load(object sender, EventArgs e) 
    {
        string Userid = Request.QueryString["userid"];
        string filename = Request.QueryString["Filename"];
        string ConnSql = System.Configuration.ConfigurationManager.AppSettings["SqlConnection"]; 
        SqlConnection conn = new SqlConnection(ConnSql); 
        string sql = "select img2 from hls where userid='" + Userid + "'";
        conn.Open();
        SqlCommand cmd = new SqlCommand(sql, conn); 
        SqlDataReader dr = cmd.ExecuteReader();
        if (dr.Read()) 
        {
                string newimg2 = "test_a.jpg";
                sql = "update hls set img2='" + newimg2 + "' where userid='" + Userid + "'";
                cmd = new SqlCommand(sql, conn);
                cmd.ExecuteNonQuery();
        }
        dr.Close();
    }
</script>异常详细信息: System.InvalidOperationException: 已有打开的与此命令相关联的 DataReader,必须首先将它关闭。源错误: 
行 24:                 sql = "update hls set img2='" + newimg2 + "' where userid='" + Userid + "'";
行 25:                 cmd = new SqlCommand(sql, conn);
行 26:                 cmd.ExecuteNonQuery(); --------------------->出错行
行 27:             }
行 28:         }难道必须先把dr关闭了重新打开才可以继续操作数据库吗?

解决方案 »

  1.   

    楼主是不是在别的页面打开 DataReader没有关闭掉,
      

  2.   

    还有你加个
    if (!this.IsPostBack){}
      

  3.   

    DataReader是独占一个Connection的,ExecuteNonQuery不能和DataReader共用一个。你需要换一个操作思路。比如你可以先把数据都读出然后闭关连接再更新。
      

  4.   


        private void page_load(object sender, EventArgs e) 
        { 
            string Userid = Request.QueryString["userid"]; 
            string filename = Request.QueryString["Filename"]; 
            string ConnSql = System.Configuration.ConfigurationManager.AppSettings["SqlConnection"]; 
            SqlConnection conn = new SqlConnection(ConnSql); 
            string sql = "select img2 from hls where userid='" + Userid + "'"; 
            conn.Open(); 
            SqlCommand cmd = new SqlCommand(sql, conn); 
            SqlDataReader dr = cmd.ExecuteReader(); 
            if (dr.Read()) 
            { 
                    dr.Close(); 
                    string newimg2 = "test_a.jpg"; 
                    sql = "update hls set img2='" + newimg2 + "' where userid='" + Userid + "'"; 
                    cmd = new SqlCommand(sql, conn); 
                    cmd.ExecuteNonQuery(); 
            } 
            else
              dr.Close(); 
        } 
    这样试试
      

  5.   

    if (dr.Read()) 

        conn.Close();
        ……
        conn.Open();
        ……
    }
    加上这句就可以了,原因是连接已经占用,没有关闭就再次使用
      

  6.   

    cmd 正在被用着,还怎么NEW啊~
    新定义个COMMAND
      

  7.   

    看来真是没办法啊,只有关闭再打开了~~~痛苦啊
    随便给大家看看我的新站,别骂我啊 http://www.seeis.cn
      

  8.   

    我看到有两位5个角的高手都让我加!IsPostBack,和这个有关系吗?
      

  9.   

      sql = "update hls set img2='" + newimg2 + "' where userid='" + Userid + "'";
      sql = "update hls set img2='" + newimg2 + "' where userid=" + Userid ;
    id是int吧
      

  10.   

    不好意思。搞错,datereader是独占一个链接的,你要分两个语句来执行
      

  11.   

     private void page_load(object sender, EventArgs e) 
        { 
            string Userid = Request.QueryString["userid"]; 
            string filename = Request.QueryString["Filename"]; 
            string ConnSql = System.Configuration.ConfigurationManager.AppSettings["SqlConnection"]; 
            SqlConnection conn = new SqlConnection(ConnSql); 
            string sql = "select img2 from hls where userid='" + Userid + "'"; 
            conn.Open(); 
            SqlCommand cmd = new SqlCommand(sql, conn); 
            SqlDataReader dr = cmd.ExecuteReader(); 
            if (dr.Read()) 
            { 
                    dr.Close(); 
                    
                    string newimg2 = "test_a.jpg"; 
                    sql = "update hls set img2='" + newimg2 + "' where userid='" + Userid + "'"; 
                    cmd = new SqlCommand(sql, conn); 
                    cmd.ExecuteNonQuery(); 
            } 
            
        } //看看应该可以
      

  12.   

    解决方法: 两个DataReader用不同的SqlConnection,Command;注意: DataReader依托于SqlConnection,如果SqlConnection关闭了,DataReader也就自动消亡了~