[英]C#: Value property of DateTimePicker not compatible with Date/Time of MS Access database 2013
[英]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.