powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / DataSet, DBNull, DateTime
20 сообщений из 20, страница 1 из 1
DataSet, DBNull, DateTime
    #35774518
DimonNew
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Привет, подскажите пож-та, может кто сталкивался? Есть типизированный DataSet, в котором автоматически сгенерены DataTable, TableAdapter, TableRow.
После выборки данных (Fill), пытаюсь обратиться к одному из полей, содержащее Null
Код: plaintext
((DataSet.MyTableRow)dtp.Rows[0]).MyField
и выдается ошибка
Код: plaintext
{"The value for column 'MyField' in table 'MyTable' is DBNull."}
Как ее можно избежать, кроме как в самом запросе поставить IsNull?
Свойство у поля NulValue для DateTime не может меняться на другие значения, кроме как Throw exception.
...
Рейтинг: 0 / 0
DataSet, DBNull, DateTime
    #35774713
Konst Eprst
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
DimonNew,

ну так проверку на null при обращении к полю делайте.
что-нить вроде
Код: plaintext
1.
2.
3.
if (((DataSet.MyTableRow)dtp.Rows[0]).MyField != null)
{...}
else
{...}
...
Рейтинг: 0 / 0
DataSet, DBNull, DateTime
    #35775395
DimonNew
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Так ведь
Код: plaintext
((DataSet.MyTableRow)dtp.Rows[0]).MyField
возвращает на Null, а ошибку. Я не могу понять, если ставлю AllowDBNull=true, то NulValue может принимать только одно значение для DateTime = (Throw exception). Если AllowDBNull=false, то NulValue могу присвоить любое допустимое значение для DateTime, например 01.01.1900, но во втором случае ошибка уже возникает раньше, при вызове Fill, что не может создать ограничение.
...
Рейтинг: 0 / 0
DataSet, DBNull, DateTime
    #35775612
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
DataSet.MyTableRow

Объясните, как это Вы выходите через датасет и сразу к Row?
...
Рейтинг: 0 / 0
DataSet, DBNull, DateTime
    #35775659
DimonNew
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я создаю DataSet, используя шаблон DataSet при добавлении нового класса к проекту. Из окна Server Explorer переношу нужную таблицу из базы MyTable, в результате чего автоматически генериться описание класса DataSet, в котором есть описание класса MyTableRow.
...
Рейтинг: 0 / 0
DataSet, DBNull, DateTime
    #35775671
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Зачем тогда используете эту гадость - кастинг dtp.Rows[], если у Вас датасет и так уже типизирован?
...
Рейтинг: 0 / 0
DataSet, DBNull, DateTime
    #35775676
DimonNew
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
dtp.Rows[0].MyField?
...
Рейтинг: 0 / 0
DataSet, DBNull, DateTime
    #35775680
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
dtp.Rows[0]["MyField"]

Только смысл тогда в типизации датасета, коль Вы плеткой по танку лупите :)
...
Рейтинг: 0 / 0
DataSet, DBNull, DateTime
    #35775953
DimonNew
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да привык я к DataModule в Delphi. Поэтому пока с C# на Вы. Но стягать плеткой по танку можно, результат то мне возвращает правильный, в других полях, без ошибок. Но спасибо за помощь, о результатах сообщу :)
...
Рейтинг: 0 / 0
DataSet, DBNull, DateTime
    #35775959
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DimonNewДа привык я к DataModule в Delphi
Забудьте про эту гадость :)
Если уж чешется, то рекомендую немнного ознакомиться с холиварной теории на счет датамод у ля - http://sql.ru/forum/actualtopics.aspx?search=DataModule&bid=34
Обращаю Ваш интерес на более серьезные вещи: Linq to Sql, Linq to Entities, NHibernate for .NET, DataAccess Business Logic Toolkit for .NET и т.д.
Полноценная ORM модель в решении - это Вам не тупо TAdoQuery на датамод у ль бросать :)
...
Рейтинг: 0 / 0
DataSet, DBNull, DateTime
    #35775966
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
... но направление, смею заметить, Вы взяли правильное. Почти :)
Только, типизированный датасет - не лучший выбор сегодня.
...
Рейтинг: 0 / 0
DataSet, DBNull, DateTime
    #35775975
Артем_84
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУ...это Вам не тупо TAdoQuery на датамод у ль бросать :)
а что плохого в том, что среда позволяет такой быстрый и удобный способ, как бросать ТАдоКвери на ДатаМ о дуль?

Я кстати в соседнем топике просил вкратце описать способ создания в студии морды для БД, так никто и не ответил. Т.к. в студии работаю недавно и пока знаком только с программной (ручной) работой с данными :(
...
Рейтинг: 0 / 0
DataSet, DBNull, DateTime
    #35775986
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Артем_84а что плохого в том, что среда позволяет такой быстрый и удобный способ, как бросать ТАдоКвери на ДатаМ о дуль?
Ну бросили - а дальше что?
Датамодуль удовлетворяет "совокупности основополагающих принципов, лежащих в основе объектно-ориентированного проектирования; парадигме программирования, основанной на принципах абстрагирования, инкапсуляции, модульности, иерархичности, типизации, параллелизма и устойчивости" ? :))

Артем_84Я кстати в соседнем топике просил вкратце описать способ создания в студии морды для БД, так никто и не ответил. Т.к. в студии работаю недавно и пока знаком только с программной (ручной) работой с данными :(
Видимо уже старикам форума эта тема настолько приелась, что ломает снова шуметь по этому поводу :)
P.S. Даже не читал Ваш вопрос, да и в лом ))
...
Рейтинг: 0 / 0
DataSet, DBNull, DateTime
    #35776086
DimonNew
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
DataModule как и типизированный DataSet позволяет сократить ручную работу по набиванию текста программы - описание полей таблиц, параметров, логику обновления данных и т.п.
...
Рейтинг: 0 / 0
DataSet, DBNull, DateTime
    #35776096
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DimonNewDataModule как и типизированный DataSet позволяет сократить ручную работу по набиванию текста программы - описание полей таблиц, параметров, логику обновления данных и т.п.
1. DataModule не сокращает ручную работу по набиванию текста программы, он предназначен для упорядочивания невизуальных дата-компонентов в решении. Чтобы не размазывать эти компоненты по всем формам решения.
2. DataModule не сокращает ручную работу по логике обновления данных.

DataModule - это просто контейнер для дата-компонент, всё.
DataModule ничего общего не имеет с типизированным датасетом.
DataModule ничего общего не имеет с ORM в целом.

Вопросы?
...
Рейтинг: 0 / 0
DataSet, DBNull, DateTime
    #35776131
DimonNew
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Согласен :) Но при использовании типизированного DataSet мне не нужно, например, вручную описывать объкеты Parameters, они автоматически форимруются, плюс удобство окна свойств, это же сокращает написание ручного кода или я ошибаюсь?
...
Рейтинг: 0 / 0
DataSet, DBNull, DateTime
    #35776141
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DimonNewСогласен :) Но при использовании типизированного DataSet мне не нужно, например, вручную описывать объкеты Parameters, они автоматически форимруются, плюс удобство окна свойств, это же сокращает написание ручного кода или я ошибаюсь?
Да, Вы правы - в типизированном датасете удобства есть. И довольно качественные удобства. Я просто советовал топиккастеру использовать более продвинутые ORM в решениях.
Типизированный датасет невольно устаревает, появляются более мощные и удобные средства объектного маппинга на классы.
Если и сабжиста .NET 3.5 и VS 2008, то замечательная Linq to Sql уже инкапсулирована, чем грех не воспользоваться.
...
Рейтинг: 0 / 0
DataSet, DBNull, DateTime
    #35776843
DimonNew
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
МСУ
Код: plaintext
dtp.Rows[0]["MyField"]

Только смысл тогда в типизации датасета, коль Вы плеткой по танку лупите :)
Благодарю за помощь, именно так надо было обращаться к полям,
так как, если использовать "плетку для танка":
DimonNew
Код: plaintext
((DataSet.MyTableRow)dtp.Rows[0]).MyField
то идет обращение к автоматически сгенеренному свойству:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
public System.DateTime MyField {
                get {
                    try {
                        return ((global::System.DateTime)(this[this.tableMyTable.MyFieldColumn]));
                    }
                    catch (global::System.InvalidCastException e) {
                        throw new global::System.Data.StrongTypingException("The value for column \'MyField\' in table \'MyTable\' is DBNull.", e);
                    }
                }
                set {
                    this[this.tableMyTable.MyFieldColumn] = value;
                }
            }

и соответственно DBNull в DateTime преобразовать нельзя, тем более проверить на значение.

Спасибо, что помогли разобраться.

Модератор: Тема перенесена из форума "C#.NET".
...
Рейтинг: 0 / 0
DataSet, DBNull, DateTime
    #35778670
savolv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
DimonNew,


Перед тем как использовать поле с Null значением выполни проверку

Код: plaintext
if (! ((DataSet.MyTableRow)dtp.Rows[0]).IsMyFieldNull())
...

В твоем сгенерированном должен быть метод IsMyFieldNull()
...
Рейтинг: 0 / 0
DataSet, DBNull, DateTime
    #35779100
DimonNew
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
savolv В твоем сгенерированном должен быть метод IsMyFieldNull()


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


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