C# 数据库更新
我正在使用下面的代码更新数据库中某人的电子邮件和密码。我有一个datagridview,它只有一行。当我点击更新按钮时,什么也没发生——页面被刷新,文本框中的值恢复到以前的状态……更新不起作用。请帮忙。谢谢C# 数据库更新,c#,asp.net,sql,C#,Asp.net,Sql,我正在使用下面的代码更新数据库中某人的电子邮件和密码。我有一个datagridview,它只有一行。当我点击更新按钮时,什么也没发生——页面被刷新,文本框中的值恢复到以前的状态……更新不起作用。请帮忙。谢谢 protected void btnUpdateAccount_Click(object sender, EventArgs e) { SqlConnection conn = new SqlConnection(GetConnectionString()); string
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是布尔值
可能会发生很多事情
您需要再次绑定数据库中的数据以获得新的更改。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();
}
}