我正在使用C#程序。我正在使用Access 2010.我有一些令人困惑的SQL查询。
OleDbCommand cmd = new OleDbCommand("SELECT * FROM Daybook WHERE [Entry Date]<=#" +
dateTimePicker13.Value.ToString("yyyy/MM/dd", CultureInfo.InvariantCulture) +
"# AND [Entry Date]>=#" +
dateTimePicker12.Value.ToString("yyyy/MM/dd", CultureInfo.InvariantCulture) +
"# AND Credit<>0 AND Debit<>0", conn);
它不起作用。我也试过NOT Credit=0
......但这也行不通。当我尝试`Credit!= 0'时,它给了我一个语法错误。
此外:当我用 1 替换 0 时,{{1或者NOT Credit=1
它会回复并显示除1之外的所有值,这对于第二种情况是正确的。
这是正确的方法吗?我必须选择信用卡和借记卡不为0的值。是否存在可能的替代值或者是否出现了语法错误?
提前致谢!
答案 0 :(得分:0)
您应该能够使用LinqToSql访问Access数据库。它必须在2002年或更新。它应该看起来像以下几行:
using (OleDbConnection connection = new OleDbConnection(DbConnString))
using (DataRepositoryDataContext ctx = new DataRepositoryDataContext(connection))
{
var books = ctx.Daybook.Where(o=>
o.EntryDate <= dateTimePicker13.Value &&
o.EntryDate >= dateTimePicker12.Value &&
o.Credit != 0 &&
o.Debit != 0
);
//do something with books ex: print list of names to console
Console.WriteLine(string.Join(",",books.Select(o=>o.Name).ToList()));
}
记录操作员Not Equal To is <>的正确方法。
大多数实现都支持ANSI标准运算符&lt;&gt;以及大多数流行编程语言用户都熟悉的!=运算符。
这些仅支持ANSI标准运算符:
要将结果限制在时间范围内,您应该使用BETWEEN。