SQL Ошибка команды обновления в ExecuteNonQuery - PullRequest
0 голосов
/ 23 марта 2020

Когда я пытаюсь подключиться к моей базе данных, чтобы редактировать данные в MVC. Когда я пытаюсь получить доступ к своему мнению, у меня возникает ошибка при выполнении моей команды. ошибка:

System.Data.SqlClient.SqlException: 'неправильный синтаксис рядом с' '. неправильный синтаксис рядом с ключевым словом SET.

, но я не могу понять мои синтаксические ошибки. Я начинающий, поэтому я все еще изучаю основы. Был бы очень признателен за любую помощь. Спасибо! .. вот мой код

private void UpdateDataBase(int EmailId, string userName, string title, string Email, string description)
{
    var sqlstring = string.Format("UPDATE Email (Email, Description, UserName, Title) " +
        "SET ('{0}',  '{1}',  '{2}',  '{3}')", Email, description, userName, title +
        "WHERE ID=" + EmailId);

    var myConnection = getconection();
    SqlCommand myCommand = new SqlCommand(sqlstring, myConnection);
    myCommand.ExecuteNonQuery();

    try
    {
        myConnection.Close();
    }
    catch (Exception e)
    {
        Console.WriteLine(e.ToString());
    }
}
public ActionResult Edit (int EmailId, string userName, string title, string Email, string description)
{          
    UpdateDataBase(EmailId, userName, title, Email, description);

    return View("EmailData");
}

[HttpPost]
public ActionResult Edit (ModelTemplateEmail  EditEmailData)
{       
    if (ModelState.IsValid)
    {                
      return RedirectToAction("EmailData");
    };
    return View(EditEmailData);
}

1 Ответ

2 голосов
/ 23 марта 2020

Есть несколько проблем с вашим кодом

  1. Синтаксис UPDATE неверен. Это должно быть UPDATE SET columnName = value...
  2. Использовать параметризованные запросы, потому что в данный момент ваш код уязвим для SQL инъекции
  3. Перемещение myCommand.ExecuteNonQuery(); внутри блока try для отлова любых исключений

Пожалуйста, смотрите мое обновление вашего кода:

var sqlstring = @"UPDATE Email SET Email = @email, Description = @description, UserName = @username, Title = @title WHERE ID = @id");

var myConnection = getconection();
SqlCommand myCommand = new SqlCommand(sqlstring, myConnection);

// add parameters
myCommand.Parameters.AddWithValue("@email", email);
myCommand.Parameters.AddWithValue("@description", description);
myCommand.Parameters.AddWithValue("@username", userName);
myCommand.Parameters.AddWithValue("@title", title);
myCommand.Parameters.AddWithValue("@id", emailId);

try
{
    // execute the command in the try block to catch any exceptions
    myCommand.ExecuteNonQuery();
    myConnection.Close();
}
catch (Exception e)
{
    Console.WriteLine(e.ToString());
}

Как уже упоминалось в комментариях, вы должны действительно выполнить обновление в методе HttpPost и проверить значения перед вызовом UpdateDataBase().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...