Модераторы: gambit

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> добавление даты в бд Access 
V
    Опции темы
Экскалупатор
Дата 13.10.2010, 07:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1746
Регистрация: 1.4.2009
Где: г. Минск

Репутация: 3
Всего: 24



всем привет. есть таблица в бд Access. там есть поле типа "короткий формат даты", должно принимать такие записи "10.10.2010". при попытке добавить туда дату выпадает исключение "Несоответствие типов данных в выражении условия отбора."
пытался так:
Код

OleDbParameter dataDoc = cmd.Parameters.Add("@DateArrive", OleDbType.DBDate);
            dataDoc.Value = DateTime.Now.ToShortDateString();

и так:
Код

OleDbParameter dataDoc = cmd.Parameters.Add("@DateArrive", OleDbType.DBDate);
            dataDoc.Value = DateTime.Now.Date;

даже так:
Код

OleDbParameter dataDoc = cmd.Parameters.Add("@DateArrive", "10.10.2010");

при чем при отладке видно что в параметр записывается строка вида "10.10.2010". но в кавычках, я так понимаю что проблема в том что он воспринимает ее именно как строку, и по этому не пропускает. как быть?
PM MAIL ICQ   Вверх
mrbrooks
Дата 13.10.2010, 08:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


Профиль
Группа: Завсегдатай
Сообщений: 4259
Регистрация: 4.10.2006
Где: Дол Гулдур

Репутация: 5
Всего: 306



в свое время в дебилдере сталкивался с аналогичной проблемой в Access. У него метка времени была на американский манер. Грубо говоря (именно с решетками):
Цитата

#месяц/день/год#

PM MAIL   Вверх
mrbrooks
Дата 13.10.2010, 08:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


Профиль
Группа: Завсегдатай
Сообщений: 4259
Регистрация: 4.10.2006
Где: Дол Гулдур

Репутация: 5
Всего: 306



хотя по логике вещей все преобразования должны делаться под ковром. сделай так:
Код

var dataDoc = cmd.Parameters.Add("@DateArrive", OleDbType.Date);
dataDoc.Value = DateTime.Now.Date;

PM MAIL   Вверх
Экскалупатор
Дата 13.10.2010, 09:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1746
Регистрация: 1.4.2009
Где: г. Минск

Репутация: 3
Всего: 24



все равно ошибка, но уже "переполнение".
PM MAIL ICQ   Вверх
mrbrooks
Дата 13.10.2010, 09:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


Профиль
Группа: Завсегдатай
Сообщений: 4259
Регистрация: 4.10.2006
Где: Дол Гулдур

Репутация: 5
Всего: 306



у меня ms access 2003 - тот пример что тебе написал - работает на ура.


PM MAIL   Вверх
Экскалупатор
Дата 13.10.2010, 10:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1746
Регистрация: 1.4.2009
Где: г. Минск

Репутация: 3
Всего: 24



а какой у тебя тип поля в базе?
PM MAIL ICQ   Вверх
mrbrooks
Дата 13.10.2010, 10:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


Профиль
Группа: Завсегдатай
Сообщений: 4259
Регистрация: 4.10.2006
Где: Дол Гулдур

Репутация: 5
Всего: 306



дата/время - краткий формат даты. все условия как у тебя.
PM MAIL   Вверх
Экскалупатор
Дата 13.10.2010, 11:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1746
Регистрация: 1.4.2009
Где: г. Минск

Репутация: 3
Всего: 24



только что все перепроверил. дата/время, краткий фотрмат даты. результат = "переполнение"

Добавлено через 3 минуты
запрос:
Код

INSERT INTO DBArriveDevice
                                                    (DateArrive, SerialNumber, SF, Node)
                            VALUES 
                                (@DateArrive, @SerialNumber, @SF, @NODE)

передача параметра:
Код

            OleDbParameter dataDoc = cmd.Parameters.Add("@DateArrive", OleDbType.Date);            
            dataDoc.Value = DateTime.Now.Date;


если из запроса убрать дату то все ок. но с датой выпадает исключение "переполнение"
PM MAIL ICQ   Вверх
mrbrooks
Дата 13.10.2010, 12:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


Профиль
Группа: Завсегдатай
Сообщений: 4259
Регистрация: 4.10.2006
Где: Дол Гулдур

Репутация: 5
Всего: 306



хм. подключи (если уже не подключил) БД к обозревателю серверов и сгенерируй запрос на вставку - посмотри - чисто SQL - запросом все проходит?

Цитата(Экскалупатор @  13.10.2010,  12:12 Найти цитируемый пост)
но с датой выпадает исключение "переполнение" 

OverflowException?
PM MAIL   Вверх
Экскалупатор
Дата 13.10.2010, 12:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1746
Регистрация: 1.4.2009
Где: г. Минск

Репутация: 3
Всего: 24



System.Data.OleDb.OleDbException was caught
  Message="Переполнение"
  Source="Microsoft JET Database Engine"
  ErrorCode=-2147217833

PM MAIL ICQ   Вверх
mrbrooks
Дата 13.10.2010, 13:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


Профиль
Группа: Завсегдатай
Сообщений: 4259
Регистрация: 4.10.2006
Где: Дол Гулдур

Репутация: 5
Всего: 306



попробуй так:
Код

            OleDbParameter dataDoc = cmd.Parameters.Add("@DateArrive", OleDbType.Char);            
            dataDoc.Value = DateTime.Now.Date;

PM MAIL   Вверх
Экскалупатор
Дата 13.10.2010, 14:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1746
Регистрация: 1.4.2009
Где: г. Минск

Репутация: 3
Всего: 24



System.Data.OleDb.OleDbException: Несоответствие типов данных в выражении условия отбора
PM MAIL ICQ   Вверх
mrbrooks
Дата 14.10.2010, 08:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


Профиль
Группа: Завсегдатай
Сообщений: 4259
Регистрация: 4.10.2006
Где: Дол Гулдур

Репутация: 5
Всего: 306



у меня на 2003 все работает. 
а ты одну запись вставляешь?
PM MAIL   Вверх
Экскалупатор
Дата 14.10.2010, 11:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1746
Регистрация: 1.4.2009
Где: г. Минск

Репутация: 3
Всего: 24



да
PM MAIL ICQ   Вверх
mrbrooks
Дата 14.10.2010, 11:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


Профиль
Группа: Завсегдатай
Сообщений: 4259
Регистрация: 4.10.2006
Где: Дол Гулдур

Репутация: 5
Всего: 306



да. тут только танцы с бубном. 
а так?
Код

            OleDbParameter dataDoc = cmd.Parameters.Add("@DateArrive", OleDbType.Date);            
            dataDoc.Value = new DateTime(2010,10,14);

PM MAIL   Вверх
Экскалупатор
Дата 14.10.2010, 14:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1746
Регистрация: 1.4.2009
Где: г. Минск

Репутация: 3
Всего: 24



хм. короче вопрос решился. походу глюк был где то в базе. пересоздал базу заново и ВСЕ выше приведенные варианты начали работать. так что спасибо. с меня + за участие и подсказки. 

з.ы. правда обнаружил другой глюк: несмотря на то что в базе стоит тип поля как "краткий формат даты" если добавлять так:
Код

            OleDbParameter dataDoc = cmd.Parameters.Add("@DateArrive", OleDbType.Date);
            dataDoc.Value = DateTime.Now.Date;

то добавляет дату со временем. если добавлять
Код

            OleDbParameter dataDoc = cmd.Parameters.Add("@DateArrive", OleDbType.DBDate);
            dataDoc.Value = DateTime.Now.Date;
или
            dataDoc.Value = DateTime.Now;


то добавляет только дату.

Это сообщение отредактировал(а) Экскалупатор - 14.10.2010, 15:39
PM MAIL ICQ   Вверх
mrbrooks
Дата 14.10.2010, 15:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


Профиль
Группа: Завсегдатай
Сообщений: 4259
Регистрация: 4.10.2006
Где: Дол Гулдур

Репутация: 5
Всего: 306



Цитата(Экскалупатор @  14.10.2010,  15:00 Найти цитируемый пост)
з.ы. правда обнаружил другой глюк:

скорее всего access просто форматирует вывод и ориентируется в итоге на то что ему предложат. ведь по сути OleDbType.Date - это полная метка - и дата и время, в то время как OleDbType.DBDate - чисто дата. 
PM MAIL   Вверх
Экскалупатор
Дата 14.10.2010, 15:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1746
Регистрация: 1.4.2009
Где: г. Минск

Репутация: 3
Всего: 24



согласен. но тогда зачем в самой таблице указывать формат? получается что хранит она все равно полностью дату, а если для меня это ненужная инфа, то оно просто будет занимать место.
PM MAIL ICQ   Вверх
mrbrooks
Дата 15.10.2010, 08:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


Профиль
Группа: Завсегдатай
Сообщений: 4259
Регистрация: 4.10.2006
Где: Дол Гулдур

Репутация: 5
Всего: 306



Цитата(Экскалупатор @  14.10.2010,  16:31 Найти цитируемый пост)
но тогда зачем в самой таблице указывать формат? 

сугубо для вывода

Цитата(Экскалупатор @  14.10.2010,  16:31 Найти цитируемый пост)
получается что хранит она все равно полностью дату, а если для меня это ненужная инфа, то оно просто будет занимать место. 

скорее всего, что так. ms access не настолько кошерна, что иметь три - фактически идентичных - типа (дата/время, дата, время).
PM MAIL   Вверх
Voyager
Дата 7.11.2010, 00:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 532
Регистрация: 8.2.2005

Репутация: нет
Всего: 18



Проблема решаема так: округляйте DateTime до секунд:
http://connect.microsoft.com/VisualStudio/...eria-expression
Код


parameter.Value = RoundToSeconds((DateTime)parameter.Value);

private static DateTime RoundToSeconds(DateTime dt)
        {
            return new DateTime(dt.Year, dt.Month, dt.Day, dt.Hour, dt.Minute, dt.Second);
        }

PM   Вверх
Экскалупатор
Дата 7.11.2010, 00:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1746
Регистрация: 1.4.2009
Где: г. Минск

Репутация: 3
Всего: 24



ммм, что это мне даст? в базе мне нежны только даты(без времени) вопрос уже решился, совершенно другим способом. 
PM MAIL ICQ   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
stab
mr.DUDA
Exception

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, stab, mr.DUDA, Exception.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Базы данных под .NET | Следующая тема »


 




[ Время генерации скрипта: 0.1085 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.