Добрый день,
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
, ячейка Тип значения — это тип short
, а не int
. Почему это произошло, когда в определении таблицы это явно и int
? Кроме того, short
следует неявно преобразовать в int
, поскольку short
меньше и должно «подходить» правильно?