2013-09-10 3 views
1

Я должен был хранить данные в DataTable по какой-то определенной причине и понял, что он не поддерживает типы с возможностью NULL: выбрасывает System.NotSupportedException: DataSet не поддерживает System.Nullable <>. Есть ли лучший эффективный способ преобразования, чем перечисление типов и запись пользовательского кода для каждого типа с нулевым значением?Как преобразовать тип NULL в его базовый тип?

+0

Вы можете использовать отражение, чтобы сделать это, но почему бы просто не назначить значение в таблице данных? –

ответ

1

Но он поддерживает обнуляемые тип, AllowDbNull является true по умолчанию:

var table = new DataTable(); 
table.Columns.Add("NullableInt", typeof(int)); 
table.Rows.Add(1); 
table.Rows.Add(2); 
table.Rows.Add(3); 
table.Rows.Add((int?)null); 

Используйте DataRowextension methods, которые поддерживают обнуляемые тип, например:

foreach(DataRow row in table.Rows) 
{ 
    int? value = row.Field<Int32?>("NullableInt"); 
    // modify the value with SetField: 
    row.SetField<Int32?>("NullableInt", null); 
    // or: 
    row.SetField("NullableInt", (int?)null); 
} 
+0

Вторая строка генерирует System.NotSupportedException: DataSet не поддерживает System.Nullable <>. – amuliar

+0

@ amuliar: Вы используете [типизированный 'DataSet'] (http://msdn.microsoft.com/en-us/library/esbykkzz.aspx) или обычный' DataSet'/'DataTable'? –

+0

Я только что использовал первый код во вновь созданном приложении. Он генерирует исключение: static void Main (string [] args) { var table = new DataTable(); table.Columns.Add ("NullableInt", typeof (Int32?)); } – amuliar

Смежные вопросы