Неверный синтаксис около 8 'ошибка при использовании запроса на обновление - PullRequest
0 голосов
/ 18 мая 2011
 static public void updateSelectedCaravan(string make, string model, string birth, string year, string Int, string ext, string width, string Unladen, string mtplm, string warranty, string freeText, string price, string location, string Tel, string Email, int makeID, string description)
{
    SqlConnection conn = new SqlConnection(ConnectionString);
    conn.Open();
    SqlCommand updateNews = new SqlCommand("Update [productDetail] SET [make] =@make , [model] = @model , [Berth] = @birth , [Year] =  @year , [InternalLength] = @Int , [ExternalLength] = @ext, [Width] = @width , [UnladenWeight] = @Unladen , [MTPLM] = @mtplm , [Warranty] = @warranty , [FreeTextDetails] = @freeText , [Price] = @price , [Location] = @location , [Tel] = @Tel , [Email] = @Email , [description] = @description where [makeID] = @makeID", conn);
    updateNews.Parameters.AddWithValue("@make", make);
    updateNews.Parameters.AddWithValue("@model", model);
    updateNews.Parameters.AddWithValue("@birth", birth );
    updateNews.Parameters.AddWithValue("@year", year);
    updateNews.Parameters.AddWithValue("@Int", Int);
    updateNews.Parameters.AddWithValue("@ext", ext);
    updateNews.Parameters.AddWithValue("@width", width);
    updateNews.Parameters.AddWithValue("@Unladen", Unladen);
    updateNews.Parameters.AddWithValue("@mtplm", mtplm);
    updateNews.Parameters.AddWithValue("@warranty",warranty);
    updateNews.Parameters.AddWithValue("@freeText", freeText);
    updateNews.Parameters.AddWithValue("@price", price);
    updateNews.Parameters.AddWithValue("@location", location);
    updateNews.Parameters.AddWithValue("@Tel", Tel);
    updateNews.Parameters.AddWithValue("@Email",Email );
    updateNews.Parameters.AddWithValue("@description",description );
    updateNews.Parameters.AddWithValue("@makeID", makeID);
    updateNews.ExecuteNonQuery();
    conn.Close();
}

Вышеприведенный запрос не работает, работает, выдает ошибку. Неправильный синтаксис около '8', раньше он работал нормально, но я не знаю, по какой причине он перестал работать, я отладил d-запрос и он прошел всенеобходимые значения.

Ответы [ 4 ]

2 голосов
/ 18 мая 2011

Один из ваших элементов данных содержит одинарную кавычку, вероятно, рядом с номером 8. Это нарушает ваш SQL и является примером случайного SQL-инъекции , который вы должны остерегаться.

Вы должны использовать параметризованные запросы. Таким образом, для вас автоматически будет исключена единичная кавычка, и эта проблема исчезнет.

1 голос
/ 18 мая 2011

В дополнение к ответам, приведенным выше, я хотел бы предложить вам попытаться отправить объект класса в вашей функции.

Это означает, что у вас должен быть проект объектной модели.Он содержит класс для всех параметров, которые вы передали в своей функции.

Добавьте ссылку этого проекта в ваш слой данных / презентацию и из презентации отправьте объект этого класса, заполненный значениями данных, для доступа к членуданные.Таким образом, если завтра вам придется увеличивать / уменьшать параметры, вам не нужно менять сигнатуру функции.

1 голос
/ 18 мая 2011

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

Во-вторых, какие типы полей? Если они целые, как и многие другие, вам не нужно делать:

SET year = '2011'

Вы бы сделали:

SET year = 2011

Это не приведет к ошибкам, но рекомендуется.

Лучший способ отладить запрос - распечатать запрос перед его выполнением, чтобы увидеть, каков фактически созданный запрос. Как уже упоминал кто-то, это, вероятно, одна цитата, вызывающая проблемы.

Если вы параматизируете свой запрос, он будет работать и будет более безопасным.

1 голос
/ 18 мая 2011

Прекратите создавать свои собственные запросы SQL.Он уязвим для атак SQL-инъекций.Вместо этого используйте параметризованные выражения, и вам больше не придется иметь дело с этими ошибками параметров.

 SqlCommand cmd = new SqlCommand("UPDATE productDetail SET make = @make WHERE id = @id");
 cmd.Parameters.AddWithValue("@make", "someValue");
 cmd.Parameters.AddWithValue("@id", 1234);

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