按钮单击“不更新SQL Server表”
本文关键字:SQL Server 不更新 更新 单击 按钮 | 更新日期: 2023-09-27 18:19:52
我有一个asp.net
应用程序,用户可以在其中更改密码,我会单击"提交"按钮,显示成功模式,但我的SQL Server表不会更新。
查看-提交按钮
<asp:Button runat="server" ID="btnChangePassword" Text="Change Password" CssClass="btn btn-success" OnClick="btnChangePassword_Click" data-toggle="modal" data-target="#placesModal" data-backdrop="static" data-keyboard="false"/>
视图-模式关闭按钮
<div class="modal-footer SuggestPlaceFooter">
<asp:Button runat="server" id="btnClose" CssClass="btn btn-success" Text="Close" OnClick="btnClose_Click" data-dismiss="modal" ToolTip="Click to close this screen." />
</div>
代码隐藏-提交按钮onclick
protected void btnChangePassword_Click(object sender, EventArgs e)
{
#region Update 'Password' column in the 'Users' table
string connection = ConfigurationManager.ConnectionStrings["PaydayLunchConnectionString1"].ConnectionString;
SqlConnection conn = new SqlConnection(connection);
conn.Open();
SqlCommand com = new SqlCommand(
"UPDATE Users " +
"SET Password values('" + txtConfirmPassword + "') " +
"WHERE Username = " + Session["Username"] + " ", conn);
com.ExecuteNonQuery();
conn.Close();
}
代码隐藏-关闭按钮onclick
protected void btnClose_Click(object sender, EventArgs e)
{
txtPassword.Text = string.Empty;
txtConfirmPassword.Text = string.Empty;
}
SQL表详细信息
表名称=用户
要更新的列=密码
更新显然应该ONLY为登录的使用进行更新,我认为我可以使用Session["Username"]
,因为我在其他地方使用它,因为这个名称与SQL server中的Username
列匹配。
您的更新查询错误,因此该列没有更新。此外,您的查询已对Sql Injection开放。我已经相应地更改了您的代码,还使用了using
块来确保连接对象关闭并正确处理。
为了确保连接始终是关闭的,请打开using块内部的连接,如下面的代码片段所示。这样做可以确保在代码退出块时自动关闭连接参考
string password = txtConfirmPassword;
var userName = Session["Username"];
string myQuery = "UPDATE Users SET Password = @password Where Username = @username";
using (SqlConnection connection = new SqlConnection("ConnectionString"))
{
using (SqlCommand cmd = new SqlCommand(myQuery, connection))
{
cmd.Parameters.Add("@password", SqlDbType.NVarChar).Value = password;
cmd.Parameters.Add("@username", SqlDbType.VarChar).Value = userName;
connection.Open();
cmd.ExecuteNonQuery();
}
} //connection closed and disposed here
您的SQL命令应该是这样的:
SqlCommand com = new SqlCommand(
"UPDATE Users " +
"SET Password = '" + txtConfirmPassword.Text + "' " +
"WHERE Username = " + Session["Username"] + " ", conn);
看看这里:http://www.techonthenet.com/sql_server/update.php
EDIT:或者更好的方法是,您的查询应该使用参数来避免SQL注入攻击,如下所示:
SqlCommand com = new SqlCommand(
"UPDATE Users " +
"SET Password = @password" +
"WHERE Username = @username ;" , conn);
com.Parameters.Add(new SqlParameter("@password", System.Data.SqlDbType.VarChar).Value = txtConfirmPassword.Text);
com.Parameters.Add(new SqlParameter("@username", System.Data.SqlDbType.VarChar).Value = Session["Username"].ToString());
在这里可以找到一个准备好的UPDATE命令的基本示例:http://rosettacode.org/wiki/Parametrized_SQL_statement#C.23
我受到了所有模态的影响,因为除非我将其全部删除,否则它不会碰到任何断点,我还将Update
语句更新为:
SqlCommand com = new SqlCommand(
"UPDATE Users " +
"SET Password ='" + txtConfirmPassword.Text + "' " +
"WHERE Username ='" + Session["Username"] + "' ", conn);