Добрый день,
IDE Visual Studio 2010 .NET 3,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<int>("ID"); // InvalidCastException
string sDescrption = drSource.Field<string>("Description");
}
}
При переходе к выполнению и выполнению «Быстрого просмотра» на неисправной строке я обнаружил, что, изменяя строку на drSource.Field<object>("ID")
, тип значения ячейки равен short
и не из int
.Почему это происходит, когда в определении таблицы это ясно и int
?Кроме того, short
должно быть неявно преобразовано в int
, поскольку short
меньше и должно "соответствовать", верно?