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

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

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

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

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


Код: plaintext
 uid  =  S a

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


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

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

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

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

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

так что вот так..
...
Рейтинг: 0 / 0
29.06.2007, 22:18
    #34629815
Sa
Sa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Типизированный датасет и DBNull
Витася
Ладно, я понял - нету возможности у типизированного датасета проверить поле на 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
30.06.2007, 11:00
    #34629999
Витася
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Типизированный датасет и DBNull
Sa
Не надо торопиться.


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

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

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


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