Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / запрос с участием даты / 7 сообщений из 7, страница 1 из 1
23.02.2009, 19:39
    #35832887
ecoli
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
запрос с участием даты
Добрый день, всех с праздником!
Ситуация в следующем есть четыре текстовых поля из которых данные передаются в параметры
запроса.
Так как дата строковый параметр, приходится ее конвертировать в тип datetime
В ходе этого есть ряд проблем.
Четыре поля это фамилия имя отчество и дата рождения. Вот как раз с датой рождения проблема
Не всегда в запросе есть данные о дате рождения, если оставить дату пустой выдается ошибка конвертирования. Если использовать какое значение дефолтное, тоже не есть хорошо, так как чистота запроса пострадает.
Кто как выходит из данной ситуации?
...
Рейтинг: 0 / 0
23.02.2009, 19:49
    #35832892
ecoli
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
запрос с участием даты
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
Dim comSQL As SqlCommand = New SqlCommand("select person_surname,person_firname,person_secname,person_birthday from personperiodic WHERE person_surname like '%'+@person_surname+'%'and person_firname like '%'+@person_firname+'%' and person_secname like '%'+@person_secname+'%' and person_birthday like '%'+@person_birthday+'%'", conn)
        Dim birthday As DateTime
        comSQL.Parameters.Add("@person_surname", SqlDbType.VarChar)
        comSQL.Parameters("@person_surname").Value = TextBox1.Text
        comSQL.Parameters.Add("@person_firname", SqlDbType.NVarChar)
        comSQL.Parameters("@person_firname").Value = TextBox2.Text
        comSQL.Parameters.Add("@person_secname", SqlDbType.NVarChar)
        comSQL.Parameters("@person_secname").Value = TextBox3.Text
        birthday = Convert.ToDateTime(TextBox4.Text)
        comSQL.Parameters.Add("@person_birthday", SqlDbType.DateTime)
        comSQL.Parameters("@person_birthday").Value = birthday
вот сам код для наглядности
...
Рейтинг: 0 / 0
23.02.2009, 23:01
    #35833106
Ex_Soft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
запрос с участием даты
Где-то как-то так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
Dim comSQL As SqlCommand = New SqlCommand("select person_surname,person_firname,person_secname,person_birthday from personperiodic WHERE (person_surname like @person_surname) and (person_firname like @person_firname) and (person_secname like @person_secname) and ((person_birthday=@person_birthday) or (@person_birthday is null))", conn)
comSQL.Parameters.Add("@person_surname", SqlDbType.VarChar)
comSQL.Parameters("@person_surname").Value = "%"+TextBox1.Text+"%"
comSQL.Parameters.Add("@person_firname", SqlDbType.NVarChar)
comSQL.Parameters("@person_firname").Value = "%"+TextBox2.Text+"%"
comSQL.Parameters.Add("@person_secname", SqlDbType.NVarChar)
comSQL.Parameters("@person_secname").Value = "%"+TextBox3.Text+"%"
comSQL.Parameters.Add("@person_birthday", SqlDbType.DateTime)
comSQL.Parameters("@person_birthday").Value=TextBox4.Text!=string.Empty ? (object)Convert.ToDateTime(TextBox4.Text) : DBNull.Value;
сорри за суржик
Надеюсь - идею Вы уловили...
_________________
"Helo, word!" - 17 errors 56 warnings
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
24.02.2009, 00:07
    #35833155
ecoli
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
запрос с участием даты
не совсем понял, что Вы имели ввиду.
Попробовал сделать проверку на пустую строку через условие if
но все равно не выходит, ругается если дата не заполнена ((
Есть еще мысли?
...
Рейтинг: 0 / 0
24.02.2009, 09:33
    #35833337
WYPMAH
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
запрос с участием даты
ecoli
попробуйте так:
Код: plaintext
select ... form personperiodic where ... and ISNULL(@person_birthday, person_birthday) = person_birthday
а перед передачей параметра смотрите, если дата пустая, то DBNull.Value , если нет - значение.
...
Рейтинг: 0 / 0
24.02.2009, 16:20
    #35834535
Ex_Soft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
запрос с участием даты
ecoli
через условие if

Код: plaintext
1.
2.
3.
4.
5.
comSQL.Parameters.Add("@person_birthday", SqlDbType.DateTime)
if(TextBox4.Text!=string.Empty)
  comSQL.Parameters("@person_birthday").Value=Convert.ToDateTime(TextBox4.Text);
else
  comSQL.Parameters("@person_birthday").Value=DBNull.Value;
???
_________________
"Helo, word!" - 17 errors 56 warnings
...
Рейтинг: 0 / 0
24.02.2009, 22:24
    #35835333
ecoli
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
запрос с участием даты
to Ex_Soft thanks,
сработало, мое почтение за толерантность и выдержку ))
Думаю что это не пследний мой вопрос здесь )))

Спасибо всем остальным, все работает!
...
Рейтинг: 0 / 0
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / запрос с участием даты / 7 сообщений из 7, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]