如何以与区域性无关的方式向 MS Access OleDb 命令提供日期
本文关键字:OleDb Access MS 命令 日期 方式 区域性 | 更新日期: 2023-09-27 18:35:32
我正在开发一个C#程序。在该程序中,我从 Access 2010 数据库和流程数据中选择一些日期。但是,我无法访问和处理包含 01/12/2014 和 11/12/2014 范围内日期的行的数据,但我可以处理剩余日期。
cmd = new OleDbCommand("SELECT MIN([Vch No]) FROM [" + group + "] WHERE [Entry Date]=#" + date + "#", conn);
long Vch = long.Parse(cmd.ExecuteScalar().ToString()) - 1;
我在网上收到错误long Vch = ... - 1;
说无法获得正确的输入字符串。然而,它适用于这些特定日期之前或之后的其他日期。
我用这个代码声明日期:
cmd = new OleDbCommand("SELECT TOP 1 * FROM (SELECT DISTINCT [Entry Date] FROM [" + group + "]) WHERE [Entry Date]>#" + initDate + "# ORDER BY [Entry Date]", conn);
dr = cmd.ExecuteReader(); dr.Read();
string date = dr["Entry Date"].ToString();
提前谢谢你!
尝试将变量date
设置为非区域性特定的日期格式,以便YYYY/MM/DD
例如 2014/12/01
如果date
是 C# DateTime
对象,则需要调用:
date.ToString("yyyy/MM/dd", CultureInfo.InvariantCulture);
根据将日期时间转换为年/月/日
转换所以:
cmd = new OleDbCommand("SELECT MIN([Vch No]) FROM [" + group + "] WHERE [Entry Date]=#" +
date.ToString("yyyy/MM/dd", CultureInfo.InvariantCulture) +
"#", conn);
long Vch = long.Parse(cmd.ExecuteScalar().ToString()) - 1;
编辑以添加
根据@Gord-Thompson的评论,在可能的情况下使用参数始终被认为是最佳实践(通常总是!
所以:
cmd = new OleDbCommand("SELECT MIN([Vch No]) FROM [@pGroup] WHERE [Entry Date]=@pDate", conn);
cmd.Parameters.Add("@pGroup", OleDbType.NVarChar).Value = group;
cmd.Parameters.Add("@pDate", OleDbType.DateTime).Value = date;
long Vch = long.Parse(cmd.ExecuteScalar().ToString()) - 1;
尽量避免使用cmd.Parameters.AddWithValue()
- 有关更多详细信息,请参阅 http://blogs.msmvps.com/jcoehoorn/blog/2014/05/12/can-we-stop-using-addwithvalue-already/。