если я понимаю, что вы хотите сделать, вы хотите заполнить DataSet с помощью адаптера OleDb для MS Access, а затем отфильтровать этот DataSet с помощью запроса сверху. Это правильно?
Если это так, то столбцы даты в возвращенном наборе данных должны содержать типы DateTime, и вы сможете просто запрашивать набор данных с помощью LINQ. Нажмите здесь , чтобы узнать, как это сделать, в блоге 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, представляющее собой значение Value в ArgName, начиная с позиции 1, или ноль, если оно не найдено. Если таковые даны как строковые литералы, он будет просто возвращать ноль, что Access, вероятно, интерпретирует как ложное в предложении Where и не возвращает результатов. Если вы хотите получить позицию строки внутри другой в C #, используйте string.IndexOf()
, если вы хотите узнать, содержит ли одна строка другую, используйте string.Contains()
Также обратите внимание, что between..and
в Access включает начало / конечные точки, как и LINQ выше.