我在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 + "'"
如果需要有关我的代码的更多信息,请告诉我。
答案 0 :(得分:2)
尝试参数化您的查询(以避免SQL注入攻击),然后在try-catch
内执行它以查看它是否抛出异常。 EG:
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
子句使用相同的用户名字段,如果用户输入的数据库中尚未包含其他用户名,则会失败(更不用说,您应该检查以确保他们正在更改的用户名属于他们而不是其他人。)
答案 1 :(得分:0)
根据Joe S的SQL注入答案,将表名和字段名转义出来,因为这些将使用方括号保留,例如。
"UPDATE [Users] SET [username] = '" + txtUsername.Text + "', [password] = '" + txtPassword.Text + "' WHERE [username] = '" + txtUsername.Text + "'"