2017-02-17 9 views
0

Я импортировал набор данных MSSQL в конструктор DataSet Visual Studio, но у меня возникают проблемы с типами, не допускающими null. Моя база данных допускает нулевые целые числа (и я хотел бы сохранить ее таким образом, если это возможно), но целые числа в .NET не могут быть нулевыми. Я хотел бы использовать нулевые целые числа в .NET, но этот тип данных, похоже, не является допустимым в раскрывающемся списке свойства DataType DataSet Designer.Как обрабатывать DBNull при вытягивании данных из DataAdapter

Я бы предпочел не вручную редактировать файл класса DataSet.Designer каждый раз, когда я делаю изменение схемы, чтобы изменить тип данных на целое число с нулевым значением. Я просто хочу, чтобы мое свойство возвращало Null/Nothing вместо того, чтобы бросать исключение StrongTypingException, когда я ссылаюсь на свойство, которое является DBNull.

Я вижу, что в конструкторе DataSet существует свойство столбца NullValue, но мне не разрешено выбирать «Return Null», если мой тип данных не является Object.

Есть ли чистый способ обработки DBNULL> Нулевое преобразование, используя настройки в дизайнере или опрятную функцию обертки? Я не хочу использовать функции IsColumnNameNull() для каждого столбца каждый раз, когда я вызываю одно из этих свойств. Я также не хочу, чтобы каждый раз вводил объекты в их фактические типы.

Дайте мне знать, если я рассматриваю эту проблему неправильно. Любые отзывы приветствуются. Благодаря!

+0

https://msdn.microsoft.com/en-us/library/1t3y8s4s.aspx; Неверные типы в .net. –

+1

вы также можете использовать int32.tryparse и рассматривать все нулевые целые числа как отрицательные значения или некоторые другие значения по умолчанию, если вы хотите сохранить их как нормальные целые числа. –

ответ

2

Вы можете использовать общий метод расширения .Field<T>("ColumnName") от System.Data.DataSetExtensions сборка.

int? intValue = datarow.Field<int?>("CustomerId"); // c# 
Dim intValue As Integer? = datarow.Field(Of Integer?)("CustomerId") ' vb.net 

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

Или избавиться от DataSet, DataTable и DataRow типов и использовать светлые классы «POCO» с определенными типами свойств.

Используя классы, вы сделали небольшое приложение для вашего приложения более масштабируемым для будущих изменений - например, перейдя с DataSets на некоторые ORM-структуры, с классами вы можете изменить доступ к данным, не затрагивая основную бизнес-логику.

+0

Спасибо за экспертную перспективу. Я попробую некоторые из этих решений. – EMUEVIL