我不确定这段代码有什么问题......
else if (combo_View.Text == "Orders")
{
da.SelectCommand = new OleDbCommand("SELECT * FROM TestQuery WHERE (VendorName = @VendorName OR @VendorName = '') AND (CustomerName = @CustomerName OR @CustomerName = '') AND (PO = @PO OR @PO = '') AND (ItemNum = @ItemNum OR @ItemNum = '') AND (orderDate BETWEEN @From AND @To) ORDER BY CustomerName", cs);
//da.SelectCommand = new OleDbCommand("SELECT * FROM TestQuery WHERE orderDate BETWEEN @From AND @To", cs);
da.SelectCommand.Parameters.Add("@VendorName", OleDbType.VarChar).Value = combo_VendorView.Text.ToString();
da.SelectCommand.Parameters.Add("@CustomerName", OleDbType.VarChar).Value = combo_CustomerView.Text.ToString();
da.SelectCommand.Parameters.Add("@From", OleDbType.Date).Value = "#" + tp_viewFrom.Value.Date.ToString("M/d/yyyy") + "#";
da.SelectCommand.Parameters.Add("@To", OleDbType.Date).Value = "#" + tp_viewTo.Value.Date.ToString("M/d/yyyy") + "#";
da.SelectCommand.Parameters.Add("@PO", OleDbType.VarChar).Value = txt_POLookup.Text.ToString();
da.SelectCommand.Parameters.Add("@ItemNum", OleDbType.VarChar).Value = combo_ItemNumLookup.Text.ToString();
dsB.Clear();
da.Fill(dsB);
dgv_DataLookup.DataSource = dsB.Tables[0];
}
基本上,我想用一个between语句填充数据网格。对于未注释的SelectCommand,当选择有效日期时,我似乎在我的数据网格上没有值。但是,当我在此之后取出select命令的注释时,它只在其唯一的日期工作。当我有其他参数时,有人能告诉我第一个命令有什么问题吗?感谢
编辑:
更奇怪的是,当我使用这个选择命令时:
da.SelectCommand = new OleDbCommand("SELECT * FROM TestQuery WHERE
(VendorName = @VendorName OR @VendorName = '')
AND (CustomerName = @CustomerName OR @CustomerName = '')
AND orderDate BETWEEN @From AND @To ORDER BY CustomerName", cs);
它可以工作,但我添加了更多内容并停止......
答案 0 :(得分:0)
我认为这不是你的日期选择那就是问题。我认为这是一些像这样的陈述:
VendorName = @VendorName OR @VendorName = ''
你的意思是@VendorName = ''
还是你想写VendorName = ''
?
我怀疑是因为你正在和WHERE
中的所有条款并列,因为没有符合所有条件的数据,所以你没有得到任何数据。
EDIT 根据你的进一步编辑,听起来就像你添加更多数据,你被排除/过滤没有得到任何结果,所以我再次建议没有结果,因为没有数据符合那些收紧的标准。
答案 1 :(得分:0)
几乎可以肯定,传递给其他参数的值导致一个或多个其他子句评估为false。检查在调试器中放入非日期参数的内容和/或对数据库进行概要分析以提取值..
答案 2 :(得分:0)
如果您的任何数据值或between子句中的参数本身为null,则between将始终为false。测试@from和@to上的空值,并将其放在一个或那个测试中。
and (@from is null or @to is null or <between stmt> )