У нас есть код, который архивирует данные из базы данных Microsoft Access в базу данных MS SQL Server. Предполагая, что у нас есть считыватель данных, уже заполненный из таблицы Access, и мы добавляем параметр в SqlCommand в процессе подготовки к вставке, у нас есть ошибка типа, которая терпит неудачу. Вот код:
oSqlServerDbCmd_ForInsert.Parameters.AddWithValue("@Duration",
(int) oReader["Duration"]);
Поле из oReader на самом деле является Integer Access, который является коротким на С#. Если мы кратко остановимся здесь, проблем нет. Однако, если мы применяем int, код генерирует InvalidCastException. Возможно, это неверно из документации MSDN:
"Существует предопределенное неявное преобразование от короткого к int, long, float, double или decimal".
... но похоже, что это должно работать (по моему рассуждению, если определено неявное преобразование, почему бы не явный тип не работал?). Я понимаю, что актер даже не нужен, потому что AddWithValue принимает объект, поэтому мы действительно удалили актерский состав из нашего кода, но я хотел бы получить объяснение относительно того, почему этот кастинг был неудачным на всякий случай, когда мы сталкиваемся с чем-то вроде этого в будущее.