我开发了一个模块并将数据存储到MS Access数据库(mdb)中。一个字段使用DateTime名称(Date_of_Installation)作为参考。记录保存完好。当我使用OleDBDataAdaptor检索记录来填充DataSet时,datetime的问题是将数据库中的格式更改为如何更改DB中的日期时间格式。 查询示例
command.CommandText = "Select * from LicenseDetails where
instr(1,"+ArgName+",'" + Value + "') and Date_of_Installation between
#06/08/2009 1:31:10 PM# and #10/09/2009 2:54:57 PM#;
我正在使用2005视觉工作室。如何使用Linq?
答案 0 :(得分:7)
如果我理解你想要做什么,你想使用OleDb适配器将DataSet填充到MS Access,然后使用上面的查询过滤该DataSet。这是对的吗?
如果是这样,那么返回的DataSet中的日期列应该包含DateTime类型,您应该能够使用LINQ查询DataSet。 Click here有关如何执行此操作的ADO.NET博客文章。
您的LINQ表达式如下所示:
var query = from r in MyDataSet.Tables["LicenseDetails"].AsEnumerable()
where r.Field<DateTime>("Date_of_Installation") >= new DateTime(6,8,2009,13,31,10)
&& r.Field<DateTime>("Date_of_Installation") <= new DateTime(10,9,2009,14,54,57)
select r;
FYI instr(1,"+ArgName+",'" + Value + "')
返回一个int,它是从位置1开始的ArgName中Value的位置,如果未找到则返回零。如果将它们作为字符串文字给出,它将只返回零,Access可能在Where子句中将其解释为false并且不返回任何结果。如果你想在C#中获取一个字符串的位置,请使用string.IndexOf()
,如果你想知道一个字符串是否包含另一个字符串,请使用string.Contains()
另请注意Access中的between..and
包含起始/终点,就像上面的LINQ一样。