Проблема с командой SQL - предложение WHERE - PullRequest
0 голосов
/ 05 декабря 2010

Я использую эту команду sql в своем коде ASP.NET C #, которая будет выводить корзину кода для текущего пользователя, вошедшего в систему.

Я получу идентификатор пользователя, вошедшего в систему, и сохраню его встроковая переменная и использовать ее в моей команде SQL:

BasketPage.SelectCommand = "SELECT tblBasketDetails.BasketID, tblBasketDetails.BookID, tblBooks.Title, tblBasketDetails.Quantity, tblBasket.UserID, tblBasket.CreatedDate FROM tblBasket INNER JOIN tblBasketDetails ON tblBasket.BasketID = tblBasketDetails.BasketID INNER JOIN tblBooks ON tblBasketDetails.BookID = tblBooks.BookID WHERE (tblBasket.UserID = " + CurrentUser + ")";

Однако я получаю сообщение об ошибке "Неверный синтаксис рядом с 'd'."

Запроссоздается с помощью построения запросов в Visual Studio 2010, я не знаю, является ли это причиной проблемы?

Ответы [ 3 ]

3 голосов
/ 05 декабря 2010

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

(tblBasket.UserID = '" + replace(CurrentUser, "'", "''")+ "')

Предполагается, что CurrentUser является строковым значением.

0 голосов
/ 05 декабря 2010

Почему вы не используете это вместо этого?http://www.aspnet101.com/2007/03/parameterized-queries-in-asp-net/

0 голосов
/ 05 декабря 2010

Ваше утверждение неверно на многих уровнях ..... прочитайте вступительную книгу.

Посмотрим:

ГДЕ (tblBasket.UserID = "+ CurrentUser + ")";

Хорошо: сначала прочитайте «Атака SQL-инъекцией» в Википедии. Вы только что сделали один. Кажется, каждый идиот может взломать вашу базу данных, введя умное имя пользователя. Gratulations. Используйте параметры.

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

Во-вторых, если вы настаиваете на том, чтобы соединить вашу строку, обратите внимание, что если пользователь будет выполнять дамп, оператор будет читать> UserID = dumbo>, что не будет допустимым SQL. В валидном SQL вам нужно поместить строку (dumbo) в некоторые разделители (например: 'dumbo').

Запрос производится с использованием запроса здание в Visual Studio 2010, я не знаете, если это вызывает проблему?

Да, это так. Использование toold, не зная, как работает лежащая в основе технология, - очень хорошая вещь.

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