LinqToDB - Insert, BulkCopy, between - SQLite неправильная работа
От: bisoft Россия www.grapholite.com
Дата: 10.11.23 17:30
Оценка:
Привет всем,

Обнаружил, что метод Insert при вставке записи в таблицу с автоинкрементным ключем и заданным значением все равно вставляет новый ключ.
Попробовал обойти и вставлять с помощью
Connection.BulkCopy(new BulkCopyOptions() { KeepIdentity = true }, result);

Записи вставились как надо, но обнаружилась следующая ошибка. При вставке через BulkCopy записи с типом дата вставляются в формате "2023-10-01" и в этом случае
при запросе between '2023-10-01' and '2023-10-30' записи с датой 2023-10-01 в интервал не попадают.
А вот если даты будут в базе в формате "2023-10-01 00:00:00" (просто Insert их в таком виде и вставляет) то тогда попадают.
Причем выполнение запроса вручную возвращает все записи, а в программе их уже нет.
С уважением,
Андрей Мазуров.
Re: LinqToDB - Insert, BulkCopy, between - SQLite неправильная работа
От: Разраб  
Дата: 11.11.23 02:06
Оценка:
Здравствуйте, bisoft, Вы писали:

B>Привет всем,


B> Обнаружил, что метод Insert при вставке записи в таблицу с автоинкрементным ключем и заданным значением все равно вставляет новый ключ.

B>Попробовал обойти и вставлять с помощью
B>
B>Connection.BulkCopy(new BulkCopyOptions() { KeepIdentity = true }, result);
B>

B>Записи вставились как надо, но обнаружилась следующая ошибка. При вставке через BulkCopy записи с типом дата вставляются в формате "2023-10-01" и в этом случае
B>при запросе between '2023-10-01' and '2023-10-30' записи с датой 2023-10-01 в интервал не попадают.
B>А вот если даты будут в базе в формате "2023-10-01 00:00:00" (просто Insert их в таком виде и вставляет) то тогда попадают.
B>Причем выполнение запроса вручную возвращает все записи, а в программе их уже нет.
https://linq2db.github.io/articles/sql/Bulk-Copy.html#options от субд зависит. сравнение дат может зависеть от таймзоны.
☭ ✊ В мире нет ничего, кроме движущейся материи.
Re[2]: LinqToDB - Insert, BulkCopy, between - SQLite неправильная работа
От: bisoft Россия www.grapholite.com
Дата: 11.11.23 15:50
Оценка:
Здравствуйте, Разраб, Вы писали:

Р>https://linq2db.github.io/articles/sql/Bulk-Copy.html#options от субд зависит. сравнение дат может зависеть от таймзоны.


да я понимаю, что зависит, но ошибка именно в том, что если в поле DateTime2 даты записаны со временем хотя бы "00:00:00" то все работает, а если без, то не работает.
Insert всегда вставляет даты со временем и все работает, а вот Bulk-Copy вставляет без времени и between не включает граничные даты
С уважением,
Андрей Мазуров.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.