我在后面的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中的查询构建生成查询,我不知道这是否导致问题?
答案 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)