2009-10-04 118 views
4

我开发了一个模块并将数据存储到MS Access数据库(mdb)中。一个Field使用DateTime Name(Date_of_Installation)作为参考。记录存储正常。当我使用OleDBDataAdaptor检索记录以填充DataSet时,datetime问题正在改变数据库中的格式,以便如何更改数据库中的日期时间格式。 实例查询MS Access中的日期时间格式

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年的Visual Studio。如何使用Linq?

回答

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是价值的ArgName从位置1,或者从零开始,如果没有找到它的位置。如果这些字符串是以字符串形式给出的,那么它只会返回零,这个Access可能在Where子句中被解释为false并且不返回任何结果。如果要在C#中使用另一个字符串获取字符串的位置,请使用string.IndexOf(),如果要查明一个字符串是否包含另一个字符串,请使用string.Contains()另请注意,Access中的between..and包含起始/终结点,就像上面的LINQ一样。

+3

+1了解问题! – 2009-10-04 18:53:57