C# 通过c在SQL中按日期过滤#

C# 通过c在SQL中按日期过滤#,c#,ms-access,C#,Ms Access,女士们,先生们,大家好 我在C#中的sql有问题。让我简单地说一下 这是我的密码: OleDbConnection mydb; OleDbCommand cmd; OleDbCommandBuilder build; OleDbDataAdapter adapter; DataTable dt; DataSet ds; BindingSource bs; String query; public AnnualRateHistory() { InitializeComponent();

女士们,先生们,大家好

我在C#中的sql有问题。让我简单地说一下 这是我的密码:

OleDbConnection mydb;
OleDbCommand cmd;
OleDbCommandBuilder build;
OleDbDataAdapter adapter;
DataTable dt;
DataSet ds;
BindingSource bs;
String query;

public AnnualRateHistory()
{
    InitializeComponent();

    query = @"SELECT * FROM _Annual_Rate WHERE Date = 02/11/2014";
    build = new OleDbCommandBuilder(adapter);
    bs = new BindingSource();

    adapter = new OleDbDataAdapter(query, mydb);
    dt = new DataTable();
    adapter.Fill(dt);
}
好吧,我删除了很多代码以使其变得简单,但基本上我的问题一定是在sql上。我删除的代码是mydb.Open()并关闭连接。 如果我使用该sql语句,则不会显示任何内容,它会精确地设置为数据库中的一个数据。如果我将
'='
替换为
'>'
,则所有内容都会显示出来;如果我使用
,有两个问题-

  • 你的约会方式不太合适。通常最好是 使用日期格式(即yyyy-MM-ddTHH:MM:ss)

  • 您要求SQL server返回日期所在的行 准确地说2014年11月2日,也就是那天的午夜。如果您想要当天的所有记录,则应为:

    SELECT * FROM _Annual_Rate WHERE Date_Of_Rate > '2014-11-02' and Date_Of_Rate < '2014-11-03'
    
    在英国是指11月2日,但在美国是指2月11日。许多国家使用不同的日期格式,即使在您自己的国家,您也无法始终保证服务器的设置方式。这在过去给我们(我工作的公司)带来了很大的麻烦。在切换到ISO8601日期之前,我们指定了要写入的日期:

    'dd-MMM-yyyy HH:mm:ss' (11-feb-2014 14:19:56) 
    
    在一家法国公司提供了一台装有法语SQL server设置的机器之前,它已经工作了很长一段时间。Feb在法语中是Fév,所以所有与那台机器相关的软件都被炸毁了。从那时起,我们吸取了教训。始终使用ISO8601日期格式。它们是获得完全不含糊日期的唯一方法。

    两个问题-

  • 你的约会方式不太合适。通常最好是 使用日期格式(即yyyy-MM-ddTHH:MM:ss)

  • 您要求SQL server返回日期所在的行 准确地说2014年11月2日,也就是那天的午夜。如果您想要当天的所有记录,则应为:

    SELECT * FROM _Annual_Rate WHERE Date_Of_Rate > '2014-11-02' and Date_Of_Rate < '2014-11-03'
    
    在英国是指11月2日,但在美国是指2月11日。许多国家使用不同的日期格式,即使在您自己的国家,您也无法始终保证服务器的设置方式。这在过去给我们(我工作的公司)带来了很大的麻烦。在切换到ISO8601日期之前,我们指定了要写入的日期:

    'dd-MMM-yyyy HH:mm:ss' (11-feb-2014 14:19:56) 
    

    在一家法国公司提供了一台装有法语SQL server设置的机器之前,它已经工作了很长一段时间。Feb在法语中是Fév,所以所有与那台机器相关的软件都被炸毁了。从那时起,我们吸取了教训。始终使用ISO8601日期格式。它们是获得完全不含糊日期的唯一方法。

    查看模式,问题似乎是您使用了错误的列名-您的列名为
    Date\u of\u Rate
    ,但您正在筛选名为
    Date
    的列

    另外,
    Date
    是一个关键字,这可能就是您出现数据不匹配错误的原因

    因此,只要将其更改为此,即可解决此问题:

    query = @"SELECT * FROM _Annual_Rate WHERE Date_Of_Rate = '02/11/2014'";
    

    注意:语法适用于MySQL/SQL Server,因为问题最初标记不正确。

    查看模式,问题似乎是您使用了错误的列名-您的列名为
    Date\u Of\u Rate
    ,但您正在筛选名为
    Date
    的列

    另外,
    Date
    是一个关键字,这可能就是您出现数据不匹配错误的原因

    因此,只要将其更改为此,即可解决此问题:

    query = @"SELECT * FROM _Annual_Rate WHERE Date_Of_Rate = '02/11/2014'";
    

    注意:语法适用于MySQL/SQL Server,因为问题最初的标记不正确。

    我发现您的SQL存在两个问题

  • 当列实际上是
    Date\u Of\u Rate
    时,您正在筛选
    Date
  • 您需要在查询中的DateTime值周围加上“#”
  • 如果这样做,您的查询应该正常工作:

    query = @"SELECT * FROM _Annual_Rate WHERE Date_Of_Rate = #02/11/2014#";
    

    我发现您的SQL存在两个问题

  • 当列实际上是
    Date\u Of\u Rate
    时,您正在筛选
    Date
  • 您需要在查询中的DateTime值周围加上“#”
  • 如果这样做,您的查询应该正常工作:

    query = @"SELECT * FROM _Annual_Rate WHERE Date_Of_Rate = #02/11/2014#";
    

    是的,它应该像那样输入,带引号。当您使用
    >
    时,它显示所有内容的原因是因为2014年11月2日表示2除以11除以2014,即0。您可以发布
    \u年率表
    的架构吗?您可以发布一个访问和标记mysql和sql-server的图像。是的,它应该像这样键入,并带有引号。当您使用
    >
    时,它显示所有内容的原因是因为2014年11月2日表示2除以11除以2014,即0。您可以发布
    \u年费率表
    的架构吗?您可以发布访问和标记mysql和sql server的图像。
    在sql server中不起作用。您必须用单引号将日期括起来。@AndrewBarber他没有使用SQL Server。他使用的是MS Access数据库,它使用的是
    #
    。是的,标签令人困惑,尤其是没有屏幕截图。我现在重新标记了这个问题,标记上写着[sql server]。当然,我现在看到它还说[mysql]那些肯定是错误的,那么…
    在SQL Server中不起作用。您必须用单引号将日期括起来。@AndrewBarber他没有使用SQL Server。他使用的是MS Access数据库,它使用的是
    #
    。是的,标签令人困惑,尤其是没有屏幕截图。我现在重新标记了这个问题,标记上写着[sql server]。当然,我现在看到它还说[mysql]那些肯定是错的,那么。。。