powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Типизированный датасет и DBNull
13 сообщений из 13, страница 1 из 1
Типизированный датасет и DBNull
    #34624774
Витася
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброго дня!

Подскажите, как побороть такую ситуацию. Имеем типизированный датасет, предположим, с одной таблицей. Есть у таблицы поле, к примеру, FIELD1 типа String (в базе - varchar), у которого свойство AllowDBNull установлено в true. В таблице на сервере возможна ситуация, когда это поле не заполнено (т.е. имеет значение NULL).

Как в коде проверить, является ли значение поля DBNull-ом? Ведь в типизированном датасете оно имеет тип String, и сравнить его с System.DBNull.Value у меня не получилось... Или надо отлавливать Exception при каждом обращении к этому полю?

Нарыл такой способ: if(my_datarow["Field1"] == System.DBNull.Value) ...

Теперь перестал понимать, а зачем тогда в типизированном датасете AllowDBNull... И нафига вообще типизированный датасет...
...
Рейтинг: 0 / 0
Типизированный датасет и DBNull
    #34625275
Кхе
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А что при заполнении датасета с NULL, экспешена нет?
...
Рейтинг: 0 / 0
Типизированный датасет и DBNull
    #34626654
Decard
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
а метод IsNull(Колонка) не катит?
...
Рейтинг: 0 / 0
Типизированный датасет и DBNull
    #34626658
Decard
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Метод IsNull(колонка) таблицы имеется в виду :)
...
Рейтинг: 0 / 0
Типизированный датасет и DBNull
    #34626972
Кхе
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
DecardМетод IsNull(колонка) таблицы имеется в виду :)
Что за зверь такой?
...
Рейтинг: 0 / 0
Типизированный датасет и DBNull
    #34627375
Sa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Какой Netframework ?


Код: plaintext
 uid  =  S a

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Типизированный датасет и DBNull
    #34627846
Витася
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Sa
Какой Netframework ?


Framework 2.0, Visual Studio 2005
...
Рейтинг: 0 / 0
Типизированный датасет и DBNull
    #34627890
Витася
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Decardа метод IsNull(Колонка) не катит?
Извини, никак не въеду, чей метод IsNull? DataRow-а? В принципе, катит, только он ничем не отличается от того, что я нарыл выше...

Ладно, я понял - нету возможности у типизированного датасета проверить поле на null, кроме как нетипизированным способом. Закрываем тему...
...
Рейтинг: 0 / 0
Типизированный датасет и DBNull
    #34628262
Decard
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Витася

Ладно, я понял - нету возможности у типизированного датасета проверить поле на null, кроме как нетипизированным способом. Закрываем тему...

Друг мой, вы наверное слишком много надежд возлагаете на типизированные датасеты. Типизированный датасет это просто обвязка классами, необходимая для упрощения работы. Разницы между датасетами практически никакой. Если поглядеть код проверки на Null типизированного датасета то увидим волшебный метод IsNull()

Код: plaintext
1.
2.
3.
   public bool IsDescriptionNull() {
                return this.IsNull(this.table.DescriptionColumn);
            }

так что вот так..
...
Рейтинг: 0 / 0
Типизированный датасет и DBNull
    #34629815
Sa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Витася
Ладно, я понял - нету возможности у типизированного датасета проверить поле на null, кроме как нетипизированным способом. Закрываем тему...

Не надо торопиться.
В NW 2.0 есть partial class, и Nullable . Тогда например можно поступить следующим образом.
Переименовать оригинальное поле например оно называется Column1 -> переименуем в OriginalColumn1 (сделать это можно в редакторе типизированного датасета)
Дальше через partial можно делать уже все что угодно:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
public partial class SomeRow : System.Data.DataRow {
     [System.Diagnostics.DebuggerNonUserCodeAttribute()]
// Например к классу типизированного датасета SomeRow нашей таблицы я добавил следующее int? поле с названием Column1
     public int? Column1 {
         get {
             try {
                 return OriginalColumn1;
             } catch (System.Data.StrongTypingException) {
// в итоге мы отлавливаем это исключение и просто тупо возвращаем null
                 return null;
             }
         }
         set {
             if (!value.HasValue)
                 this[this.tableSome.OriginalColumn1] = DBNull.Value;
             else
                 OriginalColumn1 = value.GetValueOrDefault();
         }
     }
}
Такая небольшая поправка позволяет забыть о проблеме.
Работа с оригинальным OriginalColumn1 осуществляется только через Column1. используем все вкусности Nullable

Код: plaintext
 uid  =  S a

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Типизированный датасет и DBNull
    #34629999
Витася
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Sa
Не надо торопиться.


Большое спасибо. Ваш способ мне очень понравился, и я не понимаю, почему его не сделали стандартным -- вроде бы как ввод в 2.0 nullable-типов прямо таки просится для реализации полей в DataRow с такими типами...

А я элементарно прощелкал наличие в типизированном datarow-е методов IsMyFie
...
Рейтинг: 0 / 0
Типизированный датасет и DBNull
    #34630001
Витася
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
... IsMyFieldNull, я имел в виду...
...
Рейтинг: 0 / 0
Типизированный датасет и DBNull
    #34681852
Фотография Strassebahn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
if (Convert.IsDBNull(value))
{
.
.
.
.
.
}
else
{
.
.
.
.
}

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


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