2017-01-11 13 views
0

Мне нужна помощь с проблемой, с которой я сталкиваюсь.Недопустимое исключение Cast при работе с целыми числами

В настоящее время я создаю программу экспорта, чтобы извлекать данные из документа Excel и выталкивать их в базу данных FoxPro (я знаю, старая технология), однако я попал в ловушку. Код пытается вытащить данные из столбца, содержащего арендную плату за месяц.

importCommand.Parameters["PRICEASK"].Value = exportReader.IsDBNull(14) 
        ? (object) DBNull.Value 
        : exportReader.GetInt32(14); 

Однако, я получаю эту ошибку:

Additional information: Specified cast is not valid.

Я совершенно откровенно тупик, почему я получаю эту ошибку

+0

Следует упомянуть, что остальная часть кода работает нормально. Я использую параметризованные запросы, чтобы вытащить и нажимать данные. –

+1

что-то вроде этого может работать int i = Convert.ToInt32 (exportReader.GetValue (14)); ' – cyboashu

+1

Тогда столбец 14 не содержит _not_ типа int32. – CodeCaster

ответ

1

Это было некоторое время, так как я работал с Excel в аналогичный потенциал, но столкнулся с очень похожими проблемами. Проблема исходила из чтения, вы говорите, что получаете Int, и ему это не нравится, вероятно, потому, что столбец/ячейка не отформатирован как целое. Должна быть опция чтения значения ячейки для строки. Что-то вроде:

importCommand.Parameters["PRICEASK"].Value = exportReader.IsDBNull(14) 
       ? (object) DBNull.Value 
       : exportReader.GetString(14); 

Получить строку и бросить, как только у вас есть, чтобы сохранить ее в своей базе данных. Попробуй это. Удачи.

+0

Привет Mate, я проверил excel, чтобы убедиться, что форматирование верное, и соответствующий столбец отформатирован как номер. Я также ранее пытался конвертировать в строку и анализировать обратно в, когда я нажимаю, но безрезультатно –

+1

@ JoshuaCameron-Mackintosh «Я также ранее пытался конвертировать в строку» - Можете ли вы выводить эту строку и вставить его здесь? В строке могут быть скрытые/нулевые символы ширины. Например, это прекрасно разбирается: 'Int32.Parse (« 99 »);', и это не так: 'Int32.Parse (« 99 »);' - второй имеет ['Zero Width Joiner'] http://www.fileformat.info/info/unicode/char/200d/index.htm). Поскольку я вставлял скрытый символ в конец, это возвращает 'true':' string.Equals («99», «99 \ u200d») '(попробуйте, SO не удаляет символ, так что он тоже здесь, в комментарии) , – Quantic