2010-12-05 116 views
0

我在我的ASP.NET C#代码中使用此sqlcommand将输出当前登录用户的代码购物车。问题与SQL命令 - WHERE子句

我得到的登录用户的ID,并将其存储在一个字符串变量,在我的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中的查询构建生成的,我不知道这是否导致该问题?

+0

UserID的数据类型是什么? – 2010-12-05 15:33:21

回答

3

您需要用参数中的double替换单个撇号。另外,使用参数,否则你打开自己的SQL注入攻击。

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

这里假定CurrentUser是一个字符串值。

+0

顺便说一句,为了帮助您使用参数,请在CurrentUser前面添加一个“@”符号,如下所示:(tblBasket.UserID = @CurrentUser),然后使用BasketPage.Parameters.AddWithValue(“@ CurrentUser”,您的值) – shamazing 2010-12-05 15:34:30

+0

但是当我做BasketPage.Select();它告诉我我需要参数 – user527330 2010-12-05 16:21:36

0

你的陈述在如此多的层面上是错误的.....阅读介绍书。

让我们来看看:

WHERE(tblBasket.UserID = “+ CurrentUser + ”)“;

确定:首先,阅读了” 在维基百科上的SQL injectioon攻击“你刚才。每个白痴都可以通过输入一个聪明的用户名来破解你的数据库,看起来似乎是这样的:恭喜,使用参数

如果是针对某个商业客户网站,并且客户起诉你,请知道“严重疏忽”(如:我不知道你是谁实际上我是这样做的)不是有效的法律辩护。 SQL注入攻击是最近的基本知识。其次,如果你坚持把你的字符串放在一起,请注意,如果用户将被转储,那么该语句会读取> UserID = dumbo>,这将不是有效的SQL。在有效SQL中,您需要在某些分隔符中放置一个字符串(dumbo)(如:'dumbo')。

的查询使用查询 建筑在Visual Studio 2010中,我不 知道这是否是导致问题产生的?

是的。在不知道底层技术如何工作的情况下使用是非常好的事情。