Я считываю битовое значение из таблицы SQL и использую логическое значение для сопоставления с логическим значением модели.
Но когда я считываю битовое поле IsPDLChecked
и инициализирую его как false, я получаю index out of range exception
.
Я просмотрел определение исключения и не понимаю, почему значение выходит за пределы допустимого диапазона из-за инициализации с ложным значением, т. е. 0
. Так что это не отрицательное значение диапазона.
Вопрос:
Почему я получаю IndexOutOfRange exception
, хотя считываемое обратно битовое значение приводится к bool, а init к false?
Код:
Модель -
public partial class EmailContact
{
public int ContactID { get; set; }
public bool IsPDLChecked { get; set; }
public string ContactDisplayName { get; set; }
public string ContactEmailAddress { get; set; }
}
Фрагмент чтения данных -
while (dataReader.Read())
{
statusList.Add(new EmailContact(dataReader["IsPDLChecked"] as bool? ?? false,dataReader["ContactDisplayName"].ToString(), dataReader["ContactEmailAddress"].ToString()));
}
Сведения об ошибке:
System.IndexOutOfRangeException было перехвачено
HResult=-2146233080
Message=IsPDLChecked
Source=System.Data
StackTrace:в System.Data.ProviderBase.FieldNameLookup.GetOrdinal(String fieldName)
в System.Data.SqlClient.SqlDataReader.GetOrdinal(String name)
в System.Data.SqlClient.SqlDataReader.get_Item(String name)
Схема БД: (я заметил, что для столбца «CHARACTER_MAX_LENGTH» установлено значение null):
Значения БД: (IsPDLChecked имеет значение)