| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Разработка Windows Forms > Хранение Date в Int |
| Автор: IApple 22.7.2008, 12:17 | ||||||
| Помогите реализовать идею (не хватает знаний осилить самостоятельно). Идея: хранить дату (без времени!) в БД на MS SQL (версии до 2008) в поле типа Int (поддержка значений NULL тоже необходима). Преимущества: - размер и быстродействие (индекс/поиск по Int явно быстрее, чем по дате-времени, которое "внутре" клон действительного числа), возможность использовать = в селектах (для выборки всех дататайм конкретного дня нужно либо "обрезать" время, либо использовать BETWEEN). В MS SQL преобразования:
В C# преобразования:
Недостатки окажутся минимальными, если добиться (вот в этом и заключаются задачи): 1) визуализации такого Int в DataGridView в виде даты (вернее строки по заданому формату, как для дат), помогите создать соответствующего наследника от DataGridViewTextBoxColumn; 2) переделка DateTimePicker (вернее NullableDateTimePicker), чтоб можно было такой компонент напрямую биндить на Int-колонку таблицы, для редактирования. Код пикера для передоделки:
|
| Автор: IApple 22.7.2008, 16:38 | ||||
т.е индекс по ДВУМ интежерам и по ОДНОМУ - это одно и то же ?
Вот именно, что ЕСЛИ уже урезаны до "date only", а если не урезаны, то надобно урезать "средствами одного orm/data layer"... Покажите пример реализации этого "средства", плиз. Глобальной переписки базы я не просил, а как раз только presentation int-а в датагриде, чтоб "выглядел", как дата. Именно в этом я просил помощи. |
| Автор: 1stain 22.7.2008, 17:02 | ||||
По-моему, единственный смысл хранить DateTime в базе в виде числа - избавиться от потери точности (MS SQL datetime менее точный чем .NET DateTime). При этом хранить сабж надо в виде bigint. Писать в базу и читать обратно можно примерно так:
Сделать nullable DateTimePicker на мой взгляд, проще всего создав юзерконтрол с таким кодом:
|
| Автор: PashaPash 22.7.2008, 17:37 |
| Индекс по одному полю длиной 4 байта (smalldatetime) и integer полю длиной 4 байта - да, одно и то же. То же поле, те же операции сравнения, только называется по-другому. Триггеры на insert/update. Или явное преобразование в Data Layer (как 1stain предложил, только с другой целью). Или OnPropertyChanged обьектов домена. Или просто календарь с переопределенным Value. Все проще, чем вместо дат целые числа по всему приложению передавать, и только показывать их как даты. Очень, наверное, удобно отлаживать код, в котором сегодня - это 733244. |
| Автор: IApple 23.7.2008, 10:07 | ||||||
какие Ticks? для хранения ДНЯ не нужен тик, нужен ДЕНЬ. Но вопрос совсем не в том был, как читать или писать в ВБ int, подменяя на ходу на DateTime - это я как раз умею. Помощь нужна в другом совсем !!! Я хочу, чтоб читалось/писалось и в таблице как на сервере, так и в датасете только Int. Упрощенно наново сформулирую чего я хочу добиться и в чем именно нужна подмога: 1) мне нужно добиться, чтоб грид, забинденый на таблицу в датасете, в которой есть колонка с данными типа INT, эту колонку ПОКАЗЫВАЛ в виде даты. Нужны, наверное, наследники от DataGridViewTextBoxColumn и/или от DataGridViewTextBoxCell, которые будут показывать хранимое в них (или прибинденое) значение типа Int в виде даты. Для редактирования на отдельной форме будет нужен дататаймпикер из п.2, а для редактирования в гриде, компонент, от него наследованиый. 2) к дататаймпикеру (я полный его код представил сам) и который работает и можно на его свойство Value (c типом DateTime) прибиндить колонку типа дататайм, "прикрутить" еще (или вместо) свойство с типом Int, к которому можно было б напрямую прибиндить Int колонку таблицы (в которой подразумевается дата).
Вот именно триггеры на insert/update для каждой таблицы с датой (ну это около половины всех моих таблиц в БД) мне трудно.
Вот именно это мне нужно !!! помогите создать календарь с переопределенным Value (это ж и есть мой п.2) Вопрос что легче, задавать кучу тригеров или передавать по всему приложению целые числа зависит от человека. Вам легче с тригерами. Мне легче "передавать". Помогите в том, в чем прошу, а не убеждайте меня в моей глупости, плиз. |
| Автор: jonie 23.7.2008, 21:41 | ||||
на сугубо мой взгляд вы занимаетесь преждевременной оптимизацией
ну тут тики, но думаю суть должна быть ясна... чем там проблемы? ----------------------------- |