我有一个类似于:
的SqlDataAdapter("Select prodID, CatalogType, prodName, catID, Integration, ItemProfileCatalogID From ShoppingCart t1
INNER JOIN ItemCatalogProfile t2 ON t1.CatalogType = t2.CatalogType
WHERE SessionID = '" + Session["ID"] + "' AND CatalogID ='" + Session["Customer"] ....)
where语句中还包含一些内容,但我似乎无法开始工作的是:
ItemProfileCatalogID ..
我需要包含这个来将项目缩小到每个项目中的一个,如果我能弄清楚在这个语句中使用什么,这个变量就会这样做。
我试过
viewstate[""]
Request.QuerryString[""]
Session[""]
我似乎无法让那些工作......
我遇到的问题是,当前购物车如果我没有要过滤的这个项目,它将返回数据库中该特定产品的每个实例,因为不同目录中最多有250个列表的一个项目,这就是ItemProfileCatalogID进来的地方,它会将其过滤到只有一个项目
有什么建议吗?
谢谢
答案 0 :(得分:1)
CatalogID
可能是数字,您在SQL语句中将其用作字符串。
也可能是你的SQL语句中有一些语法错误,在所有字符串连接发生时或由于CatalogID
包含一个顽皮字符(例如'
)而不易检测到
另外,请查看parametrized个问题;构建SQL语句时的连接通常不是一个好主意(SQL injection)。
答案 1 :(得分:1)
由于InBetween表示它可能是一个数字问题,你应该可以使用.toString()方法解决这个问题。
此外,存储过程通常更可取用于多种原因,在您的情况下,您提到您正在使用购物车,这可能会建议某种电子商务应用程序?在这里使用存储过程意味着SQL不必在每次运行时编译select语句,从而提高性能并使存储过程中的代码也增加可维护性,并可能允许您在其他地方重用该过程。 / p>
除此之外,您实际上并没有通过网络传输select语句,这增加了安全性,因为没有人可以拦截它并深入了解您的表结构,并且如上所述InBetween,存储过程将帮助您防止注入攻击或只需简单地解决数据,因为您可以更轻松地添加错误处理。