У меня есть набор данных, возвращаемый хранимой процедурой, и один из элементов в ней потенциально может быть нулевым. Я пытаюсь преобразовать каждую строку в наборе данных к строго типизированному объекту, но я не могу, похоже, правильно присвоить нулевое значение.Как правильно передать элемент в DataSet, когда он потенциально может быть пустым?
Я создал макет из моего сценария следующим образом:
DataSet ds = new DataSet();
ds.Tables.Add(new DataTable());
ds.Tables[0].Columns.Add("Name", typeof(string));
ds.Tables[0].Columns.Add("Amount", typeof(decimal));
ds.Tables[0].Rows.Add("My Name Here", null); //create row with a null item
DataRow dataRow = ds.Tables[0].Rows[0];
Person p = new Person
{
Name = (string)dataRow["Name"],
Amount = (decimal)dataRow["Amount"]
}
К сожалению, я получаю следующее исключение: (? Десятичный) System.InvalidCastException: Specified cast is not valid.
Если я пытаюсь использовать обнуляемый тип Я получаю эту ошибку: System.NotSupportedException: DataSet does not support System.Nullable<>.
в отладчике я сделал следующие тесты на значение в DataRow [ «Amount»]:
dataRow["Amount"] is decimal (false)
dataRow["Amount"] is decimal? (false)
dataRow["Amount"] == null (false)
dataRow["Amount"] is object (true)
Все, что я могу установить, это то, что это какой-то объект ... который не особенно полезен.
Может ли кто-нибудь из вас определить, что я делаю неправильно?
Спасибо за это! Я не понимал, что он возвращает DBNull. – mezoid
Вы не можете сделать 'dataRow [" Amount "] как Decimal'. Десятичные числа являются типами значений, поэтому никогда не могут быть нулевыми, и они не могут использоваться с 'as'. 'dataRow [" Amount "] - Decimal' будет эквивалентным вариантом. –
Сделайте это: '(dataRow [" Amount "] как десятичное?)! = Null' – bahramzy