У меня есть выбор, который использует datetime, из двух datetimepickers, в предложении WHERE. ВЫБРАТЬ работает нормально, заполняет DataGrid, не проблема, но bizzarely DateTime часть SELECT, полностью игнорируется, и все это возвращает набор записей, как будто только «WHERE x_account_id =» + subaccountID были использованы:Проблема SQL Server CE и Datetime Select (C#)
SqlCeConnection conn = new SqlCeConnection(Lib.ConnectionString);
string sql = "SELECT x_scaleid, x_weight, x_timestamp FROM x WHERE x_account_id = " + subaccountID
+ " AND (x_timestamp BETWEEN @start_date AND @end_date) ORDER BY x_timestamp DESC";
SqlCeCommand cmd = new SqlCeCommand(sql, conn);
cmd.Parameters.Add("@start_date", SqlDbType.DateTime, 8).Value = dFromFilter.Value.Date;
cmd.Parameters.Add("@end_date", SqlDbType.DateTime, 8).Value = dToFilter.Value.Date;
SqlCeDataAdapter da = new SqlCeDataAdapter();
da.SelectCommand = cmd;
Не удалось найти кого-либо с той же проблемой в Интернете, поэтому я как бы застрял. Может быть, мне лучше попытаться преобразовать все даты в int и сохранить их таким образом - всегда ненавидел работу с типами datetime.
Прежде, чем кто-либо спросит, я пробовал различные версии предложения, включая использование «<» и «>», а также различные варианты CONVERT.
Вы проверили, используя любой инструмент, подобный профилировщику, чтобы получить запрос, полученный в БД. Может быть время от времени, dFromFiler или dToFilter могут иметь значение «DateTime» minvalue или max. – Saravanan
Я использовал инструмент SQL Server Compact Tool для непосредственного запуска запроса, и как dFromFiler, так и dToFilter имеют самые широкие диапазоны дат max и min. Мое собственное чувство кишки состоит в том, что это проблема форматирования - формат БД для datetime и то, что C# посылает, как-то разные. – Gaddo
В этом случае попробуйте форматировать дату-время как строку и использовать любой код SQL Server, например 101,103, для форматирования даты и времени для SQL. – Saravanan