Boopalslm Ответов: 3

Неправильный синтаксис рядом с ключевым словом "where".


Я создаю приложение windows с помощью c# 2010, здесь я использую представление сетки данных для выставления счетов, но сохраняю значения представления сетки в базу данных ниже ошибка пришла

Incorrect syntax near the keyword 'where'.

 SqlCommand cmd2 = new SqlCommand("update stkdetails set customer=customer+" + rows.Cells[7].Value + " where empname='" + rows.Cells[2].Value + "'and date='" + txtdate.Text + "'", con2);



кто-нибудь даст мне несколько идей, как решить вышеприведенную ошибку

Что я уже пробовал:

Incorrect syntax near the keyword 'where'.

NotPolitcallyCorrect

Да, используйте правильные параметризованные запросы, и ваша проблема, скорее всего, исчезнет сама собой.

Boopalslm

строки.Ячейки[2]. Значение-это правильное параметризованное значение ячейки. но ошибка пришла

Vamsi Krishnna

заключите этот раздел в отдельные коды " + строк.Клеток[7].Значение + ". Проблема должна быть решена

NotPolitcallyCorrect

Нет, это не так. Вам говорили это снова и снова.

3 Ответов

Рейтинг:
2

Richard MacCutchan

Прочесть bobby-tables.com: руководство по предотвращению SQL-инъекций[^], прежде чем кто-то уничтожит вашу базу данных.


Рейтинг:
1

ZurdoDev

Это очень, очень простая ошибка, которую нужно исправить самостоятельно, потому что ошибка говорит вам об этом именно так в чем проблема. Я не хочу показаться грубым, но это было бы гораздо быстрее для вас, чтобы исправить это, чем требуется, чтобы опубликовать этот вопрос и ждать ответа.

Во-вторых, используйте параметризованный запрос. Теперь, когда у вас есть свой код, я могу очень легко взломать вашу БД. У вас очень небезопасный код.

Что-то вроде:

SqlCommand cmd2 = new SqlCommand("update stkdetails set customer= customer+ @customer where empname=@empName and..., con2);
cmd2.Parameters.AddWithValue("@customer", row.Cells[7].Value);
cmd2.Parameters.AddWithValue("@empName", rows.Cells[2].Value);
...
// you finish the rest.  Very, very simple.


Boopalslm

ниже приведена ошибка

Параметризованный запрос' (@customer nvarchar(4000),@empName nvarchar (4000))update stkdeta 'ожидает параметр' @customer', который не был указан.

Richard MacCutchan

date='" + txtdate.Text + "'" ВТФ?

ZurdoDev

Я сделал комментарий для ОП, чтобы закончить остальное. Я надеялся, что они поймут это. Но я думаю, что отредактирую его, чтобы сделать более ясным. Спасибо.

ZurdoDev

Ошибка, опять же, довольно очевидна. Он говорит, что вы не предоставили значение для @customer при вызове sql.

Boopalslm

как устранить ошибку

Boopalslm

Параметризованного запроса '(@столбец empname тип varchar(8000),@поддержки поплавка)обновление stkdetails установить ТС ожидает, что параметр '@столбец empname, которая не была поставлена.

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

Richard MacCutchan

Я надеялся, что они поймут это.
Ах да, надежда ...

ZurdoDev

Вы должны делать то, что говорит вам ошибка.

Рейтинг:
1

Patrice T

Проблема с тем, как вы строите запрос, заключается в том, что ошибка или нет зависит от содержащихся переменных.
Переменные продвигаются в SQL-код, и вредоносное значение открывает дверь для SQL-инъекции. Использование параметров может быть решением обеих проблем.
SQL-инъекция-Википедия[^]
SQL-инъекция[^]