这是我目前的代码
SELECT * FROM [Products] WHERE CategoryID=@category
我正在使用ASP.net和c#,我从page1设置会话然后重定向到page2然后将此会话用作类别。问题是我希望当会话为null时(即如果你直接进入页面,而不是第1页的重定向),代码就像下面那样工作
SELECT * FROM [Products] WHERE CategoryID= anything
所以我的所有产品都出现了,而不仅仅是特定类别的产品。 无论如何我能做到吗?
感谢。
答案 0 :(得分:1)
如果设置了@category,请运行查询。如果没有,运行这个:
SELECT * FROM Products
答案 1 :(得分:0)
您需要一个不同的查询,一个完全省略CategoryID= whatever
的查询,以执行您要执行的操作。这很容易编程。
答案 2 :(得分:0)
不,您可以传递的值不会将=
转换为<>
。您必须为此使用不同的查询,要么是一段不同的代码,要么是根据需求构建的查询。
就个人而言,我简单地使用LINQ:
var qry = context.products.AsQueryable();
if (!string.IsNullOrEmpty(session))
qry = qry.Where(p => p.CategoryID == session);
您可以继续添加这样的术语,然后在最后执行查询以获得结果。
您可以通过将查询创建为字符串和参数集合来获得类似的灵活性:
var qstr = "SELECT * FROM Products";
var parms = new Dictionary<string, object>();
if (!string.IsNullOrEmpty(session))
{
qstr += " WHERE CategoryID = @category";
parms["category"] = session;
}
using (var cmd = connection.CreateCommand())
{
cmd.CommandType = CommandType.Text;
cmd.CommandText = qstr;
foreach (var parm in parms)
cmd.Parameters.AddWithValue("@" + parm.Key, parm.Value);
using (var reader = cmd.ExecuteReader())
{
//....
}
}
如果您需要多个表单,则可以添加一些逻辑来构建条件列表。小心你如何将它们拼接在一起。
更喜欢较短的LINQ解决方案:P