我在C#.net中使用update sql命令时遇到问题

时间:2011-04-08 13:36:43

标签: c# sql

我在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 + "'"

如果需要有关我的代码的更多信息,请告诉我。

2 个答案:

答案 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 + "'"