У меня есть набор данных, возвращаемый хранимым процессом, и один из элементов в нем может быть нулевым. Я пытаюсь преобразовать каждую строку в наборе данных в строго типизированный объект, но не могу правильно привести нулевое значение.
Я создал макет моего сценария следующим образом:
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)
Все, что я могу установить, это то, что это какой-то объект ... который не особенно полезен.
Кто-нибудь из вас может заметить, что я делаю неправильно?