我有一个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表格详细信息
表名=用户
要更新的列=密码
更新显然应该仅更新登录的用途,我认为我可以使用Session["Username"]
,因为我在其他地方使用此功能,因为此名称与Username
匹配SQL服务器中的列。
答案 0 :(得分:4)
您的更新查询错误,因此列未更新。您的查询也对Sql Injection开放。我已相应更改了您的代码,并使用using
块来确保连接对象已关闭并正确处理。
要确保始终关闭连接,请打开using块内部的连接,如以下代码片段所示。这样做可确保在代码退出块时自动关闭连接。的 Reference 强>
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
答案 1 :(得分:1)
您的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());
看看这里:http://www.techonthenet.com/sql_server/update.php
编辑:或者更好的是,您的查询应该使用参数来避免SQL injection attacks这样:
{{1}}
在这里,您可以找到准备好的UPDATE命令的基本示例: http://rosettacode.org/wiki/Parametrized_SQL_statement#C.23
答案 2 :(得分:-4)
我应该使用所有模态的东西,因为除非我删除了所有断点,否则我也将Update
语句更新为:
SqlCommand com = new SqlCommand(
"UPDATE Users " +
"SET Password ='" + txtConfirmPassword.Text + "' " +
"WHERE Username ='" + Session["Username"] + "' ", conn);