ADO.net之间怪异的行为
本文关键字:net 之间 ADO | 更新日期: 2023-09-27 18:02:32
我不确定这段代码有什么问题…
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);
它可以工作,但我添加了更多的东西,它停止了…
如果between子句中的任何数据值或参数本身为空,则between将始终为false。测试@from和@to上的空值,并将中间值与该测试放在一个or中。
and (@from is null or @to is null or <between stmt> )
我不认为你的约会选择是问题所在。我想应该是这样的一些语句:
VendorName = @VendorName OR @VendorName = ''
你真正想写的是@VendorName = ''
还是VendorName = ''
?
我的怀疑是,既然你在你的WHERE
中把所有的子句放在一起,你就没有得到任何数据,因为没有数据符合所有的标准。
编辑根据你的进一步编辑,听起来一旦你添加了更多的数据,你排除/过滤你没有得到任何结果,所以我再次建议没有结果,因为没有数据符合收紧的标准。
这几乎肯定是由于传递给其他参数的值导致一个或多个其他子句的计算结果为false引起的。检查调试器中的非日期参数和/或配置数据库以提取值。