按钮单击不更新SQL Server表

时间:2015-10-30 14:36:15

标签: c# asp.net sql-server

我有一个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服务器中的列。

3 个答案:

答案 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);