Поиск в datatable с datetime в C#
Привет,
У меня есть небольшая проблема, я хочу получить все записи в datatable между двумя датами и временем. Пожалуйста, посмотрите на код ниже. Я хочу получить все записи между "25/5/2019 21:43:24 PM" и "25/5/2019 05:32:42 AM". Что я могу сделать, пожалуйста, посоветуйте.
Заранее спасибо.
Что я уже пробовал:
DataTable table = new DataTable(); table.Columns.Add(new DataColumn("ShiftStartDateTime", typeof (DateTime))); table.Columns.Add(new DataColumn("ShiftEndDateTime", typeof (DateTime))); table.Rows.Add("5/25/2019 10:20:29 PM","5/25/2019 10:59:36 PM"); table.Rows.Add("5/26/2019 9:43:24 PM","5/26/2019 9:43:14 PM"); table.Rows.Add("5/26/2019 9:43:24 PM","5/26/2019 11:19:41 PM"); table.Rows.Add("5/26/2019 9:43:24 PM","5/27/2019 4:22:14 AM"); table.Rows.Add("5/26/2019 9:43:24 PM","5/27/2019 4:23:29 AM"); table.Rows.Add("5/26/2019 9:43:24 PM","5/27/2019 5:32:42 AM"); DateTime d1 = new DateTime(2019,05,26,21,43,24); DateTime d2 = new DateTime(2019, 05, 26, 5, 32, 42); DataRow[] rows = table.Select("ShiftStartDateTime >=#"+d1.ToString("yyyy/MM/dd hh:mm:ss tt")+"#"+"AND ShiftEndDateTime <=#"+d2.ToString("yyyy/MM/dd hh:mm:ss tt")+"#"); foreach (var r in rows) { //do something here. }
Gerry Schmitz
Сначала вы "что-то делаете". И я угадал правильно.
BillWoodruff
Опишите ошибку, которая у вас сейчас есть: в чем она заключается ? где это происходит ?
Richard MacCutchan
Вы объявили свои столбцы как типы DateTime, но затем пытаетесь добавить строки, содержащие строковые значения. Не используйте строки для значений DateTime, используйте только значения DateTime. Единственный раз, когда вам нужно преобразовать их в строки, - это когда вы хотите отобразить их в удобочитаемой форме.
Member 14089908
У меня есть проблема только в следующем коде.
DataRow[] rows = таблица.Выберите("ShiftStartDateTime >=#"+d1.ToString("yyyy/MM/dd hh:mm:ss tt")+"#"+"и ShiftEndDateTime <=#"+d2.ToString("гггг/ММ/ДД чч:мм:СС ТТ")+"#");
У вас есть какие-нибудь предложения?
Richard MacCutchan
Да, как я уже предлагал, прекратите использовать строки и используйте только типы DateTime.
Member 14089908
Ты имеешь в виду, что я могу сделать вот так?
DataRow[] rows = таблица.Выберите("ShiftStartDateTime >=#"+d1+"#"+"и ShiftEndDateTime <=#"+d2+"#");
Спасибо
Richard MacCutchan
Нет. Повторяю, не используйте (и не пытайтесь использовать) строки для сравнения дат. Используйте правильные объекты DateTime в своей базе данных, datatable и коде.
Member 14089908
Привет Ричард,
Не могли бы вы дать пример кода.
Спасибо
Richard MacCutchan
Просто измените все ваши строки даты на объекты DateTime.