У меня проблемы с использованием команды обновления sql в C # .net - PullRequest
1 голос
/ 08 апреля 2011

У меня проблемы с использованием оператора обновления SQL в C #. Каждая команда, которую я выполнил до сих пор, работает, кроме моей команды обновления. Есть ли что-то особенное, что вы должны сделать с вашим кодом на 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 ]

2 голосов
/ 08 апреля 2011

Попробуйте параметризовать ваш запрос (чтобы избежать атак с использованием 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, что приведет к ошибке, если пользователь введет другое имя пользователя, которого еще нет в базе данных (не говоря уже о , вам, вероятно, следует убедиться, что изменяемое имя пользователя принадлежит им, а не кому-либо другому).

0 голосов
/ 08 апреля 2011

Исходя из ответа Джо С. на SQL-инъекцию, удалите имя таблицы и имена полей, так как они будут зарезервированы в квадратных скобках, например,

"UPDATE [Users] SET [username] = '" + txtUsername.Text + "', [password] = '" + txtPassword.Text + "' WHERE [username] = '" + txtUsername.Text + "'"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...