SQL命令问题 - WHERE子句

时间:2010-12-05 15:25:19

标签: c# asp.net sql

我在后面的ASP.NET C#代码中使用了这个sqlcommand,它将为当前登录的用户输出代码购物车。

我获取登录用户的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中的查询构建生成查询,我不知道这是否导致问题?

3 个答案:

答案 0 :(得分:3)

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

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

这假设CurrentUser是一个字符串值。

答案 1 :(得分:0)

你的陈述在很多层面都是错误的.....阅读一本介绍书。

让我们看看:

  

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

好的:首先,阅读维基百科上的“SQL injectioon攻击”。你刚做了一个。似乎每个白痴都可以通过输入智能用户名来破解你的数据库。 Gratulations。使用参数。

如果是商业客户网站,并且客户起诉你,请知道“严重疏忽”(如:我不知道我实际做了什么)不是有效的法律辩护。 SQL注入攻击是最近的基础知识。

其次,如果你坚持把你的字符串放在一起,请注意,如果用户将被转储,那么该语句将读取> UserID = dumbo>哪个不是有效的SQL。在Valid SQL中,您需要在某些分隔符中放置一个字符串(dumbo)(例如:'dumbo')。

  

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

是的,确实如此。在不知道基础技术如何工作的情况下使用toold是一件好事。

答案 2 :(得分:0)