我在使用c# .net中的update sql命令时遇到了麻烦
本文关键字:命令 sql 遇到 麻烦 update 中的 net | 更新日期: 2023-09-27 17:49:42
我在c#中使用sql更新语句有问题。到目前为止,我执行的所有命令都有效,除了我的update命令。有什么特别的你必须做你的c#.net代码,以使更新sql命令工作?
这是我的程序停止工作的代码。
command.ExecuteNonQuery(); // <--- stops here
System.Web.HttpContext.Current.Response.Write("EXECUTED QUERY!"); // <--- does not get here
SQL语法"UPDATE Users SET username = '" + txtUsername.Text +
"', password = '" + txtPassword.Text +
"' WHERE username = '" + txtUsername.Text + "'"
如果需要更多关于我的代码的信息,请告诉我。
尝试参数化您的查询(以避免SQL注入攻击),然后在try-catch
中执行它,看看它是否抛出异常。如:
SqlConnection conn = new SqlConnection(myConnectionString);
conn.Open();
SqlCommand cmd = conn.CreateCommand();
cmd.CommandText = "UPDATE Users SET username = @Username, password = @Password WHERE username = @OldUsername";
cmd.Parameters.Add(new SqlParameter("@Username", txtNewUsername.Text));
cmd.Parameters.Add(new SqlParameter("@Password", txtPassword.Text));
cmd.Parameters.Add(new SqlParameter("@OldUsername", txtOldUsername.Text));
try
{
cmd.ExecuteNonQuery();
}
catch (Exception ex)
{
Console.Writeline(String.Format("{0} thrown: {1}", ex.GetType().Name, ex.Message));
}
还请注意,SET
子句和WHERE
子句使用相同的用户名字段,如果用户输入了一个不同的用户名,并且该用户名尚未在数据库中(更不用说,您可能应该检查以确保他们正在更改的用户名属于他们而不是其他人),则会失败。
根据Joe S对SQL注入的回答,转义出您的表名和字段名,因为这些将使用方括号保留,例如
"UPDATE [Users] SET [username] = '" + txtUsername.Text + "', [password] = '" + txtPassword.Text + "' WHERE [username] = '" + txtUsername.Text + "'"