protected void btnEdit_Click(object sender, EventArgs e)
    {
        string str = "update users set pwd='" + txtPwd1.Text.Trim() + "',email='" + txtEmail.Text.Trim() + "' where uid='" + Session["username"].ToString() + "'";
        con.Open();
        SqlCommand cmd = new SqlCommand(str, con);
        SqlDataReader dr = cmd.ExecuteReader();
        if (dr.Read())
        {
           Response.Write("<script language=jscript>alert('修改成功!');</script>");
          
        }
        else
        {
            Response.Write("<script language=jscript>alert('账号或密码错误!');</script>");
        }
        con.Close();
明明修改执行成功,怎么还运行else里面的语句,而不运行if里面的语句?

解决方案 »

  1.   

    update语句返回的不是游标,所以.ExecuteReader();是失败的 
      

  2.   

    dr.Read有这功能?怎么不使用ExecuteNoQuery呢?
      

  3.   

    以前用select时用dr.Read()没有问题的
    用ExecuteNoQuery()可以
      

  4.   

    ExecuteReader();返回一个SqlDataReader对象或OleDbDataReader对象你这里是个update ,自然不会返回 SqlDataReader对象或OleDbDataReader对象,结果跳到else所以要用 
    ExecuteNonQuery() 这个方法并不返回一个DataReader对象,而是返回一个int类型的值,即在执行之后在数据库中所影响的行数
      

  5.   

    你判断下 dr.Read() 是否为 真
      

  6.   

    hzsasheng 
     发表于:2007-12-14 15:47:017楼 得分:0 
    ExecuteReader();返回一个SqlDataReader对象或OleDbDataReader对象 你这里是个update   ,自然不会返回   SqlDataReader对象或OleDbDataReader对象,结果跳到else 所以要用   
    ExecuteNonQuery()   这个方法并不返回一个DataReader对象,而是返回一个int类型的值,即在执行之后在数据库中所影响的行数 
     
    他说的是正确的 就是这样!