繁体   English   中英

C#:比较datetimepicker与MS访问日期

[英]C#: comparing datetimepicker with MS access date

我正在使用ms Access作为数据库,其中包含标识为(短日期)的字段,我使用以下查询从C#中的datetimepicker向该字段插入了时间:

string query = @"insert into category_in  (category_id,amount_in,dates) 
               values ('" + ids + "','" + amount2 + "','"+dateTimePicker1.Text+"')";

一切都很好。 但是,当我尝试将数据库中的日期与另一个datetimpicker的日期进行比较时,它不起作用。 这是比较的查询:

query = "SELECT products.category, category_in.dates FROM products, category_in where " + 
        "category_in.dates>= " + dateTimePicker1.Value.Date.ToShortTimeString() + " "
        "and category_in.dates<= " + dateTimePicker2.Value.Date.ToShortTimeString() + "";

当我使用dateTimePicker.value.Date时,出现以下错误

查询表达式'category_in.dates> = 16/08/2015 12:00:00ص和category_in.dates <= 20/08/2015 12:00:00ص中的语法错误(缺少运算符)

但是当我添加dateTimePicker.value.Date.ToShortTimeString时,没有返回结果,尽管这些日期之间有一些数据

我必须更改插入方法吗?

我很惊讶所有三个答案(到目前为止)都建议您继续使用动态SQL,并用字符串格式的日期和分隔符进行修饰,直到获得有用的东西为止。

真是愚蠢。

DateTimePicker控件返回System.DateTime值,因此您应该将其用作参数化查询的一部分,如下所示:

using (var conn = new OdbcConnection(
        @"Driver={Microsoft Access Driver (*.mdb, *.accdb)};" +
        @"Dbq=C:\Users\Public\Database1.accdb"))
using (var cmd = new OdbcCommand("INSERT INTO MyTable (DateTimeField) VALUES (?)", conn))
{
    conn.Open();
    cmd.Parameters.Add("?", OdbcType.DateTime).Value = dateTimePicker1.Value.Date;
    cmd.ExecuteNonQuery();
}

尝试将查询更改为此:

query = "SELECT products.category, category_in.dates FROM products, category_in where " + 
        "category_in.dates>= #" + dateTimePicker1.Value.ToShortDateString() + "# "
        "and category_in.dates<= #" + dateTimePicker2.Value.ToShortDateString() + "#";

我认为您的代码应为Access中的日期表达式使用#分隔符:

string query = @"insert into category_in (category_id,amount_in,dates) 
               values ('" + ids + "','" + amount2 + "',#" + DateTime.Parse(dateTimePicker1.Text).ToString("yyyy'/'MM'/'dd") + "#)";

和:

query = "SELECT products.category, category_in.dates FROM products, category_in where " + 
        "category_in.dates >= #" + dateTimePicker1.Value.Date.ToString("yyyy'/'MM'/'dd") + "# "
        "and category_in.dates <= #" + dateTimePicker2.Value.Date.ToString("yyyy'/'MM'/'dd") + "#";

问题是您的日期是字符串。 在日期时间值之前和之后添加单引号。 像这样...

query = "SELECT products.category, category_in.dates FROM products, category_in where " + 
        "category_in.dates>= '" + dateTimePicker1.Value.Date.ToShortTimeString() + "' "
        "and category_in.dates<= '" + dateTimePicker2.Value.Date.ToShortTimeString() + "'";

这将允许查询引擎将字符串隐式转换为日期时间。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM