Member 8057273 Ответов: 2

MSACCESS datetime SQL запрос


Привет. Я из Индии (возможно, это как-то связано с информацией о культуре здесь). Я построение приложения рабочего стола в C#.Net 2010, Экспресс-выпуск с MS-Access 2010, русская версия 32 бит, как серверной. Я использую OLEDB для подключения к БД.
У меня есть столбец с именем dt as Date/Time, который имеет следующие значения:
20-09-2016 22:53:32<br />
19-08-2016 22:54:24<br />
20-09-2016 22:56:01<br />
22-09-2016 22:56:27<br />
22-09-2016 22:56:41

Мне нужно получить записи по дате, месяцу и Году.
До сих пор я не могу завершить часть даты, поэтому не могу работать над месяцем и годом. Ниже приведен мой код:
b.com.CommandText = "SELECT * FROM srvtrans WHERE DateTime.Parse(dt)=@a ORDER BY sno DESC";
b.com.Parameters.Add("@a", dtp_srdmy.Value.ToShortDateString());
Show(dtp_srdmy.Value.ToShortDateString());
b.con.State == ConnectionState.Closed)
con.Close();
mytemp = new DataTable();
da.Fill(mytemp);

Я также попробовал следующие варианты:
WHERE CONVERT(VARCHAR(10),dt,111)=@a

WHERE CONVERT(VARCHAR(10),dt,101)=@a

WHERE dt LIKE '%@a%'

WHERE DateTime.Parse(dt)=@a

WHERE dt=DateValue(@a)

WHERE CAST(dt AS DATE)=@a

WHERE CONVERT(varchar, dt, 101)=@a

WHERE DATE(dt)=@a

WHERE dt=@a

но ни один из них не работает на меня. Пожалуйста, ответьте, какое обновление должно быть сделано в sql-запросе для извлечения записей по дате, месяцу и Году. Заранее спасибо.

Что я уже пробовал:

Я также попробовал следующие варианты:
WHERE CONVERT(VARCHAR(10),dt,111)=@a

WHERE CONVERT(VARCHAR(10),dt,101)=@a

WHERE dt LIKE '%@a%'

WHERE DateTime.Parse(dt)=@a

WHERE dt=DateValue(@a)

WHERE CAST(dt AS DATE)=@a

WHERE CONVERT(varchar, dt, 101)=@a

WHERE DATE(dt)=@a

WHERE dt=@a

[no name]

"Выберите * из srvtrans, где DateTime.Parse (dt)=@A ORDER BY sno DESC"; не уверен, почему вы думаете, что это сработает DateTime.Синтаксический анализ .Net код не SQL. должно быть что-то вроде
"SELECT * FROM srvtrans WHERE dt=@A ORDER BY sno DESC";

Member 8057273

Я уже упоминал об этом в вопросе, что я уже пробовал эту вариацию

2 Ответов

Рейтинг:
2

Maciej Los

MS Access database engine не знает DateTime.Parse(dt)!

Измените свойства команды на:

b.com.CommandText = "SELECT * FROM srvtrans WHERE dt=@a ORDER BY sno DESC";
b.com.Parameters.Add("@a", dtp_srdmy.Value);

и все должно быть в порядке.


Member 8057273

Я уже упоминал в этом вопросе, что уже пробовал эту вариацию

Рейтинг:
16

Wendelius

Попробуйте усечь даты с помощью следующего запроса

SELECT * FROM srvtrans WHERE DATEVALUE(dt)=DATEVALUE(@a) ORDER BY sno DESC

Просто используйте обычную дату/время в качестве значения параметра. Для получения дополнительной информации взгляните на Функция DateValue-Доступ[^]


Member 8057273

Это сработало идеально. Большое спасибо.

Wendelius

Пожалуйста :)

Member 8057273

Эй, @Mike Wendelius. Есть проблема. Если я не выберу дату в элементе управления datetimepicker, он покажет мне ошибку: "несоответствие типа данных в выражении критериев." даже несмотря на то, что текущая дата видна в элементе управления. У меня есть triwd это на событии загрузки формы: "dtp_srdmy.система ценностей.Датавремя.Сейчас," до сих пор я получаю ту же ошибку. Если я выбираю дату из элемента управления (даже если она такая же, как отображается), она работает нормально. Я использовал "MessageBox.Показать (dtp_ardmy.Ценность.ToString ()); " чтобы проверить возвращаемое значение, и возвращаемое значение одинаково в обоих случаях.

Wendelius

Это звучит так, как будто вы извлекаете значение только в событии click (или аналогичном). Вместо этого вы должны получить значение из элемента управления при запуске запроса и подготовиться также к возможности отсутствия выбора.

Если вы не можете решить эту проблему, я бы предложил открыть новый вопрос, а также опубликовать соответствующие выдержки из кода :)

Member 8057273

Да, я получаю значение datetimepicker on button click event и передаю его в качестве параметра sql-запросу.