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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Поиск по интервалу дат, в чем прикол? 
V
    Опции темы
Banderos
Дата 12.4.2011, 17:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Здравствуйте!

У меня в БД (PostgreSQL) имеются записи и там есть поле "ДАТА", вот фрагмент таблицы из БД:

user posted image

Вот фрагмент моего кода:
Код

            string dateStart = dateTimePicker1.Value.ToShortDateString().Substring(3, 2).ToString() + "." + dateTimePicker1.Value.ToShortDateString().Substring(0, 2).ToString() + "." + dateTimePicker1.Value.ToShortDateString().Substring(6, 4).ToString();
            string dateEnd = dateTimePicker2.Value.ToShortDateString().Substring(3, 2).ToString() + "." + dateTimePicker2.Value.ToShortDateString().Substring(0, 2).ToString() + "." + dateTimePicker2.Value.ToShortDateString().Substring(6, 4).ToString();
            OdbcDataAdapter adapter = new OdbcDataAdapter("SELECT * FROM temp_date WHERE col3 BETWEEN '" + dateStart + "' AND '" + dateEnd + "'", con25);
            adapter.SelectCommand.ExecuteNonQuery();
            DataTable dataT = new DataTable();
            adapter.Fill(dataT);
            dataGridView1.DataSource = dataT;


Так вот к примеру когда задаю вот такой интервал поиска:

user posted image

то результат меня пугает!!!
В чем может быть дело???

Заранее спасибо!
PM MAIL   Вверх
likegift
Дата 13.4.2011, 07:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



чтобы такого не было, дату надо передавать в виде параметров. склеивание строки таким образом не зря считается дурным тоном.

примерно так:

Код

OdbcCommand command= new OdbcCommand("SELECT * FROM temp_date WHERE col3 BETWEEN @d1 and @d2");
command.Parameters.AddWithValue("@d1",DataPicker1.Value);
command.Parameters.AddWithValue("@d2",DataPicker2.Value);

OdbcDataAdapter adapter = new OdbcDataAdapter(command,connection);
// adapter.SelectCommand.ExecuteNonQuery(); ---вот это лишнее, дублирующее Fill()
 DataTable dataT = new DataTable();
 adapter.Fill(dataT);

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


Шустрый
*


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

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



likegift, Спасибо!!!
Сейчас переделаю и протестирую.
PM MAIL   Вверх
Banderos
Дата 13.4.2011, 09:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



likegift, я попробовал так, как Вы посоветовали:

Код

            OdbcCommand cmd = new OdbcCommand("SELECT * FROM temp_date WHERE col3 BETWEEN @d1 AND @d2", con25);
            cmd.Parameters.AddWithValue("@d1", dateTimePicker1.Value);
            cmd.Parameters.AddWithValue("@d2", dateTimePicker2.Value);
            OdbcDataAdapter ad = new OdbcDataAdapter(cmd);
            DataTable result = new DataTable();
            ad.Fill(result);
            dataGridView1.DataSource = result;
            con25.Close();


И когда пытаюсь осуществить поиск, то получаю ошибку:

Код

               ERROR [42703] Error while executing the query;
               ERROR:  column "d1" does not exist at character 45


В чем дело???
PM MAIL   Вверх
likegift
Дата 13.4.2011, 09:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Цитата(Banderos @ 13.4.2011,  12:44)


И когда пытаюсь осуществить поиск, то получаю ошибку:

Код

               ERROR [42703] Error while executing the query;
               ERROR:  column "d1" does not exist at character 45


В чем дело???

видимо @ не парсится, тогда так:

Код

 OdbcCommand cmd = new OdbcCommand("SELECT * FROM temp_date WHERE col3 BETWEEN ? AND ?", con25);


Это сообщение отредактировал(а) likegift - 13.4.2011, 09:56
PM MAIL   Вверх
Banderos
Дата 13.4.2011, 10:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



likegift, заменил на "?" теперь результат запроса всегда пустой, т.е. ничего не находит)))
PM MAIL   Вверх
likegift
Дата 13.4.2011, 10:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Цитата(Banderos @ 13.4.2011,  13:02)
likegift, заменил на "?" теперь результат запроса всегда пустой, т.е. ничего не находит)))

может, потому что ничего, удовлетворяющего условию,  нет? smile
PM MAIL   Вверх
Banderos
Дата 13.4.2011, 10:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



likegift, да нет))) конечно как вариант, но я ставил с 12 апреля 2011 по 13 апреля 2011, а в таблице в БД записей с  датой 12 апреля 2011 штук 5 не меньше)

Это сообщение отредактировал(а) Banderos - 13.4.2011, 10:11
PM MAIL   Вверх
Экскалупатор
Дата 13.4.2011, 12:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



попробуй поставить диапазон пошире, может он берет не включая текущее значение.
PM MAIL ICQ   Вверх
Banderos
Дата 13.4.2011, 12:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Я кажется разобрался, у меня в БД в неправильном формате хранилась дата)
Там месяц и день были перепутаны местами. Из-за такой ерунды пол дня в топку!
Всем спасибо!!!
PM MAIL   Вверх
Экскалупатор
Дата 13.4.2011, 13:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Banderos, хм, а как ты ее заполнял? руками что ли? я думаю ты еще столкнешься с этой проблемой если не решишь ее сейчас. представление даты зависит от настроек системы, т.е. в русской нотации 03.12.2001(3 декабря 2001), а в американской это обозначает 12 марта 2001. тебе надо сделать какую то логику и приводить вводимые пользователем значения к такой локации которая хранится в базе. иначе косяки будут всегда, потому что ты не можешь быть уверен каким форматом дат пользуется пользователь.
PM MAIL ICQ   Вверх
likegift
Дата 13.4.2011, 14:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Цитата(Banderos @ 13.4.2011,  15:40)
Я кажется разобрался, у меня в БД в неправильном формате хранилась дата)
Там месяц и день были перепутаны местами. Из-за такой ерунды пол дня в топку!
Всем спасибо!!!

я думаю, там все хранилось правильно, согласно выставленным в USA настройкам. 
а в штатах месяц идет перед числом, все не как у людей.
PM MAIL   Вверх
Banderos
Дата 13.4.2011, 14:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Экскалупатор, да это я похожу при добавлении накосячил, я приводил дату, выбранную пользователем к виду М.Д.Г и потом добавлял в БД и все добавлялось, а заметил, что не правильно, только когда чисто случайно добавил запись "13 апреля 2011" и вот тогда программа выругалась (значение вышло за пределы, вот тогда то я и задумался), а потом, когда разобрался, то оказывается там дата храниться вот в таком формате: Д.М.Г.
Сейчас все исправил и теперь все работает.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
stab
mr.DUDA
Exception

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

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

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


 




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


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

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