Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - .NET

Страница: 1 | 2 | 3 |

 

  Вопрос: Вопрос по поляь NULL Добавлено: 12.11.08 05:00  

Автор вопроса:  Sergey Gaponov | ICQ: 278513301 
Я создаю запрос с SQL к базе данных и хочу считать содержимое в текстовую переменную, но если в базе по условиям поиска нет записей, появляются поля типа NULL. Возникает исключение, как эти поля распознать без обработки исключения. Типа if переменная=null Then?

Ответить

  Ответы Всего ответов: 33  

Номер ответа: 1
Автор ответа:
 Алексей



black  admin

ICQ: 261779681 

Вопросов: 87
Ответов: 633
 Web-сайт: aleksey.nemiro.ru
 Профиль | | #1
Добавлено: 12.11.08 05:12
  1. if Not IsDbNull(row("field")) then ...

Ответить

Номер ответа: 2
Автор ответа:
 Artyom



Разработчик

Вопросов: 130
Ответов: 6602
 Профиль | | #2 Добавлено: 13.11.08 14:38
Это устаревший метод.

Правильно так:
  1. If Row("field") IsNot DBNull.Value Then

Ответить

Номер ответа: 3
Автор ответа:
 Сергей



ICQ: 558230345 

Вопросов: 7
Ответов: 91
 Профиль | | #3 Добавлено: 14.11.08 10:41
мне кажется удобнее
  1. iif(Row("field") IsNot DBNull.Value ,truepart,falsepart)

Ответить

Номер ответа: 4
Автор ответа:
 Алексей



black  admin

ICQ: 261779681 

Вопросов: 87
Ответов: 633
 Web-сайт: aleksey.nemiro.ru
 Профиль | | #4
Добавлено: 14.11.08 12:35
  1. If Not DbNull.Value.Equals(row("field")) Then ...

Ответить

Номер ответа: 5
Автор ответа:
 Artyom



Разработчик

Вопросов: 130
Ответов: 6602
 Профиль | | #5 Добавлено: 14.11.08 13:06
iif(Row("field";) IsNot DBNull.Value ,truepart,falsepart)

Во-первых, функция устарела, во-вторых, в этом случае она не будет работать так как нужно, ты будешь получать те же исключения что и автор.

If Not DbNull.Value.Equals(row("field";)) Then ...

и?

Ответить

Номер ответа: 6
Автор ответа:
 Алексей



black  admin

ICQ: 261779681 

Вопросов: 87
Ответов: 633
 Web-сайт: aleksey.nemiro.ru
 Профиль | | #6
Добавлено: 14.11.08 13:20
Во-первых, функция устарела

устарела? Неужели в VB появилась достойная альтернатива сишному оператору ? : , а я пропустил это знаменательное событие?
во-вторых, в этом случае она не будет работать так как нужно

не, все будет тип-топ
и?

и?

Ответить

Номер ответа: 7
Автор ответа:
 Artyom



Разработчик

Вопросов: 130
Ответов: 6602
 Профиль | | #7 Добавлено: 14.11.08 13:24
Алексей, если бы мне не пришлось работать с этим длительное время, я бы не говорил.

устарела? Неужели в VB появилась достойная альтернатива сишному оператору ? : , а я пропустил это знаменательное событие?

Она устарела не потому что появилась альтернатива, а потому что слабо подходит для использования в среде .NET.

Впрочем альтернатива все-таки появилась и я про это писал:
http://darkbrand.spaces.live.com/blog/cns!2C4EE6D28AD2206!288.entry

не, все будет тип-топ

Заупсти
  1. Dim S As String
  2. Console.WriteLine(IIf(S IsNot Nothing, S.ToLower, ""))

Ответить

Номер ответа: 8
Автор ответа:
 Алексей



black  admin

ICQ: 261779681 

Вопросов: 87
Ответов: 633
 Web-сайт: aleksey.nemiro.ru
 Профиль | | #8
Добавлено: 14.11.08 13:36
http://darkbrand.spaces.live.com/blog/cns!2C4EE6D28AD2206!288.entry

это будущее, корпоратив еще настоящее не освоил, так что это далекое будущее :)

Dim S As String
Console.WriteLine(IIf(S IsNot Nothing, S.ToLower, "";))

Речь не об этом, запусти:
  1. Dim DT As New DataTable("Table")
  2. DT.Columns.Add("field")
  3. DT.Rows.Add(DBNull.Value)
  4. Dim row As DataRow = DT.Rows(0)
  5. Console.WriteLine(IIf(Not DBNull.Value.Equals(row("field")), row("field"), "пусто"))

тем более, что в твоем примере ты делаешь ToLower, из-за чего и происходит исключение:
  1. Dim S As String
  2. Console.WriteLine(IIf(S IsNot Nothing, S, "пусто").ToLower())

Ответить

Номер ответа: 9
Автор ответа:
 Алексей



black  admin

ICQ: 261779681 

Вопросов: 87
Ответов: 633
 Web-сайт: aleksey.nemiro.ru
 Профиль | | #9
Добавлено: 14.11.08 13:40
Алексей, если бы мне не пришлось работать с этим длительное время, я бы не говорил.

Я с этим каждый день работаю, и IIf частенько использую, в том числе и в случаях с DBNull.

Ответить

Номер ответа: 10
Автор ответа:
 Алексей



black  admin

ICQ: 261779681 

Вопросов: 87
Ответов: 633
 Web-сайт: aleksey.nemiro.ru
 Профиль | | #10
Добавлено: 14.11.08 13:53
Console.WriteLine(IIf(S IsNot Nothing, S, "пусто";).ToLower())

прогнал :) IIf возвращает Object, так что сначала ToString нужно сделать, а потом ToLower
  1. Dim S As String
  2. Console.WriteLine(IIf(S IsNot Nothing, S, "пусто").ToString().ToLower())

Ответить

Номер ответа: 11
Автор ответа:
 Artyom



Разработчик

Вопросов: 130
Ответов: 6602
 Профиль | | #11 Добавлено: 14.11.08 14:58
Алексей пишет:
это будущее, корпоратив еще настоящее не освоил, так что это далекое будущее

Я эту будущее использую уже больше года

Повторюсь, IIf нет никакого смысла использовать, так как
1) Функция нетипизирована
2) Функция работает не так как нужно в этом случае.

Если использовать If, то, как раз, все будет очень хорошо работать:
If(S IsNot Nothing, S.ToLower, "";))

Все, что-либо другое использовать нет никакого смысла (если вы конечно не любитель превратить свой код в плохоотлаживаемую кашу).

Если нет возможности работать с Visual Studio 2008, то скорее всего прийдется вообще отказаться от того чтоб писать все в одну строчку и делать развернутый блок If

Впрочем это лишь мое мнение, у каждого свои критерии того, какой код еще считается качественным, а какой уже лажа.

Ответить

Номер ответа: 12
Автор ответа:
 Алексей



black  admin

ICQ: 261779681 

Вопросов: 87
Ответов: 633
 Web-сайт: aleksey.nemiro.ru
 Профиль | | #12
Добавлено: 14.11.08 15:36
Я эту будущее использую уже больше года

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

1) Функция нетипизирована

И это говорит тот, кто совсем недавно давал добро господину Барсику самостоятельно определять тип данных :)

2) Функция работает не так как нужно в этом случае.

как раз в данном случае все в шоколаде. DataRow.Item - Object, IIf - Object. Плюс на плюс, равно плюс.
Конечно IIf э то не оператор, у оператора возможностей большей и работает он по другому, но в данном случае функция IIf вполне подходит для решения подобной задачи.

Если использовать If, то, как раз, все будет очень хорошо работать:

ok, внедри ее в FW 2.x, 1.x :)

If(S IsNot Nothing, S.ToLower, "";)

мы все еще про DBNull говорим? :)
Ясен коре (c), IIf в случае с обращением к свойствам объектов использовать никто не будет, разве что садомазохист, хотя в приведенном тобой примере можно, если осторожно и если лень писать что-то большее.

если вы конечно не любитель превратить свой код в плохоотлаживаемую кашу

Появление каши в повседневной деятельности неизбежно, более того, каша кормит мир, если бы не было каши, программисты сдохли бы с голоду, в прямом смысле этого слова, просто оставшись без работы.

Ответить

Номер ответа: 13
Автор ответа:
 Artyom



Разработчик

Вопросов: 130
Ответов: 6602
 Профиль | | #13 Добавлено: 14.11.08 16:40
Алексей пишет:
ты не бизнес, я тоже балуюсь на досуге, но, например, тратить бабло, особенно в период мирового финансового кризиса, на переписывание ПО и доучивание персонала я не буду.

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

И это говорит тот, кто совсем недавно давал добро господину Барсику самостоятельно определять тип данных

Неявная типизация работает в компилятор, отсутствие типизации и Late Binding работают в рантайме, разницу видим?

Алексей пишет:
ok, внедри ее в FW 2.x, 1.x

Ты про такую фишку конечно не знал?
http://downloads.betacode.ru/20.png

Появление каши в повседневной деятельности неизбежно, более того, каша кормит мир, если бы не было каши, программисты сдохли бы с голоду, в прямом смысле этого слова, просто оставшись без работы.

мой моск не в состоянии ответить на это

Ответить

Номер ответа: 14
Автор ответа:
 Алексей



black  admin

ICQ: 261779681 

Вопросов: 87
Ответов: 633
 Web-сайт: aleksey.nemiro.ru
 Профиль | | #14
Добавлено: 14.11.08 17:04
Интересная логика - зачем тратить лишние деньги на обучение персонала и на новое ПО, когда можно тратить лишние деньги, работая с необразованым персоналом и устаревшим ПО.

нормальная логика, выгодней работать сегодня и сейчас с уже отработанным ПО и известными багами (хотя это маловероятно, ибо многие баги в процессе использования устраняются), чем тратить деньги на курсы для персонала и создание нового ПО с новыми неизвестными багами. Да и образованный персонал может уволиться после обучения, правда не сразу, месяца через три-шесть, чтоб отработать полученные навыки на практике, и чтоб задолжность работадателю за обучение была не слишком высокой.
Пытаться угнаться за технологиями глупо, ибо они развиваются слишком быстро. Можно разве что только для того, чтоб помериться членами, только пользы от этого будет мало, и трусы на размер больше придется покупать с сеточкой для яиц :)

Ты про такую фишку конечно не знал?

ты ранние версии VS давно видел? :) Фишка с выбором версии FW появилась только в VS 2k8.

мой моск не в состоянии ответить на это

умение изящно падать – искусство ©
Программеры в основном занимаются доработкой, дебагом и сопровождением, и лишь изредка созданием новых систем, так было, так есть и всегда будет. Так что, если бы Вася не сделал кашу, ты бы не получил 200 баксов за свою работу.
На истину ни один моск не сможет ответить :)

Ответить

Номер ответа: 15
Автор ответа:
 Алексей



black  admin

ICQ: 261779681 

Вопросов: 87
Ответов: 633
 Web-сайт: aleksey.nemiro.ru
 Профиль | | #15
Добавлено: 14.11.08 17:09
Вообще, следующую глобальную смену технологий будет логичней и выгодней делать, когда появится стабильная версия Framework 4.0.

Ответить

Страница: 1 | 2 | 3 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам