DataRow.Field(string Column) выдает недопустимое исключение приведения

Добрый день,

IDEVisual Studio 2010
.NET3.5
Платформа WinForms

Вопрос SO "разница между получением значения из DataRow" относится.

У меня есть таблица базы данных со столбцом [ID] INT IDENTITY(1, 1) NOT NULL PRIMARY KEY. При запросе этой таблицы и сохранении значений в локальных переменных я получаю недопустимое исключение приведения; пример кода:

string sQuery = @"
    SELECT [ID], [Description]
    FROM [Sources]
    ORDER BY [Description] ";

using (DataTable dtSources = SQLHelper.Fetch(sQuery))
{
    foreach (DataRow drSource in dtSources.Rows)
    {
        int iID = drSource.Field("ID"); // InvalidCastException
        string sDescrption = drSource.Field("Description");
    }
}

При пошаговом выполнении и выполнении «Быстрого просмотра» ошибочной строки я обнаружил, что, изменив строку на drSource.Field("ID"), ячейка Тип значения — это тип short, а не int. Почему это произошло, когда в определении таблицы это явно и int? Кроме того, shortследует неявно преобразовать в int, поскольку shortменьше и должно «подходить» правильно?

8
задан Community 23 May 2017 в 12:26
поделиться