Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/302.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 数据库更新_C#_Asp.net_Sql - Fatal编程技术网

C# 数据库更新

C# 数据库更新,c#,asp.net,sql,C#,Asp.net,Sql,我正在使用下面的代码更新数据库中某人的电子邮件和密码。我有一个datagridview,它只有一行。当我点击更新按钮时,什么也没发生——页面被刷新,文本框中的值恢复到以前的状态……更新不起作用。请帮忙。谢谢 protected void btnUpdateAccount_Click(object sender, EventArgs e) { SqlConnection conn = new SqlConnection(GetConnectionString()); string

我正在使用下面的代码更新数据库中某人的电子邮件和密码。我有一个datagridview,它只有一行。当我点击更新按钮时,什么也没发生——页面被刷新,文本框中的值恢复到以前的状态……更新不起作用。请帮忙。谢谢

protected void btnUpdateAccount_Click(object sender, EventArgs e)
{
    SqlConnection conn = new SqlConnection(GetConnectionString());

    string sql = "UPDATE Member SET [Email] = @email, [Password] = @password WHERE [MemberID] = '" + mem_id + "'";

    TextBox email = email = (TextBox)Gridview1.Rows[0].FindControl("user_email");
    TextBox password = (TextBox)Gridview1.Rows[0].FindControl("user_password");

    try
    {

        conn.Open();
        SqlCommand cmd = new SqlCommand(sql, conn);

        cmd.Parameters.Add("@email", SqlDbType.VarChar);
        cmd.Parameters.Add("@password", SqlDbType.VarChar);

        cmd.Parameters["@email"].Value = email.Text;
        cmd.Parameters["@password"].Value = password.Text;

        cmd.CommandType = CommandType.Text;
        cmd.ExecuteNonQuery();

    }
    catch (System.Data.SqlClient.SqlException ex)
    {

        string msg = "Insert Error: ";
        msg += ex.Message;
        throw new Exception(msg);
    }

    finally
    {
        conn.Close();
    }

}

一定要把PageLoad子句放进去

**改变** 根据@marc_,注释将if(this.IsPostBack==true)更改为if(this.IsPostBack) 此.IsPostBack是布尔值



可能会发生很多事情

  • 1) btnUpdateAccount_Click事件从未引发。要解决此问题,请确保asp:Button标记设置了OnClick=“btnUpdateAccount\u Click”属性
  • 正在抛出一个异常,但您没有注意到
  • 正在更新数据库,但您没有再次加载/绑定数据以显示更新的值

  • 您需要再次绑定数据库中的数据以获得新的更改。grid view.bind()

    cmd.ExecuteNonQuery()
    它返回一个整数值,因此您可以输入。
    
    int i=cmd.ExecuteNonQuery()
    查看它返回的内容,还可以使用finally after catch确保db con关闭。在这里,您只是在catch中使用它,还要尝试放置break point,看看参数是否以正确的方式传递,并遵循它直到结束。
    像


    您是否尝试在命令执行后执行dataGridView.DataBind()?不要在数据库中保存这样的密码!!这是错误的。用于散列密码,并将散列存储在数据库中。当有人试图登录时,您再次散列并比较散列。mem_id的值是多少?您不使用参数也是有原因的吗?您已经在查询中使用了参数-我强烈建议对
    mem\u id
    值也使用参数<代码>cmd.ExecuteNonQuery();它返回一个整数值,因此您可以输入。int i=cmd.ExecuteNonQuery();查看返回的内容,也可以在尝试确保db con关闭后使用finally。这里您只是在catch中使用它,这并不好
    事实上,因为
    IsPostBack
    已经是一个布尔值,您也可以使用
    if(this.IsPostBack)
    并完成它….+1来获得关于SqlConnection和TryCatch块的非常有用的注释
    if(this.IsPostBack)
    {
    //dont load page
    }
    
    finally
            {
                if (con != null)
                {
                    con.Close();
                }
            }