访问SQL - 备用!=

时间:2015-01-05 13:34:19

标签: c# sql ms-access-2010 oledb

我正在使用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的值。是否存在可能的替代值或者是否出现了语法错误?

提前致谢!

1 个答案:

答案 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;以及大多数流行编程语言用户都熟悉的!=运算符。

  • MySQL 5.1:支持!=和&lt;&gt;
  • PostgreSQL 8.3:支持!=和&lt;&gt;
  • SQLite:支持!=和&lt;&gt;
  • Oracle 10g:支持!=和&lt;&gt;
  • Microsoft SQL Server 2000/2005/2008:支持!=和&lt;&gt;
  • IBM Informix Dynamic Server 10:支持!=和&lt;&gt;
  • InterBase / Firebird:支持两种!=和&lt;&gt;
  • Apache Derby 10.6:支持!=和&lt;&gt;
  • Sybase Adaptive Server Enterprise 11.0:支持!=和&lt;&gt;

这些仅支持ANSI标准运算符:

  • IBM DB2 UDB 9.5:仅支持&lt;&gt;
  • Microsoft Access 2010:仅支持&lt;&gt;
  

参考:Should I use != or <> for not equal in TSQL?

要将结果限制在时间范围内,您应该使用BETWEEN