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