【问题标题】:Invalid Cast exception when dealing with Integers [duplicate]处理整数时出现无效的强制转换异常[重复]
【发布时间】:2017-01-11 16:28:33
【问题描述】:

我需要一些帮助来解决我遇到的问题。

我目前正在构建一个导出程序,以从 Excel 文档中提取数据并将其推送到 FoxPro 数据库(我知道,老技术),但是我遇到了障碍。该代码尝试从包含一个月租金的列中提取数据。

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

但是,我得到了这个错误:

附加信息:指定的演员表无效。

坦率地说,我很困惑为什么会出现这个错误

【问题讨论】:

  • 我应该提到其余的代码工作正常。我正在使用参数化查询来拉取和推送数据。
  • 这样的事情可能work int i = Convert.ToInt32(exportReader.GetValue(14));
  • 那么第 14 列 not 是否包含 int32 类型。
  • 它调用的列中的第一个值是 349
  • 这并不意味着什么,349 可能看起来是一个数字,但它可能是一个字符串。检查excel文件,点击列,看看是什么格式

标签: c# excel visual-foxpro


【解决方案1】:

自从我以类似的能力使用 Excel 以来已经有一段时间了,但遇到了一个非常类似的问题。问题来自读取,你告诉它你得到一个 Int 并且它不喜欢它,可能是因为列/单元格没有格式化为整数。应该有一个选项可以将单元格值读取为字符串。比如:

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

一旦将字符串存储在数据库中,就获取字符串并进行转换。试试看。祝你好运。

【讨论】:

  • 嗨,伙计,我检查了 excel 以确保格式正确,并且有问题的列被格式化为数字。我之前也尝试过在推送时转换为字符串并解析回 in,但无济于事
  • @JoshuaCameron-Mackintosh “我之前也尝试过转换为字符串” - 您可以输出该字符串并将其粘贴到此处吗?字符串中可以有隐藏/零宽度字符。例如,这可以很好地解析:Int32.Parse("99");,而这不能:Int32.Parse("99‍");——第二个有一个Zero Width Joiner。因为我在最后粘贴了隐藏字符,所以返回true:string.Equals("99‍", "99\u200d")(试试看,所以不会剥离字符,所以它也在评论中)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-11-01
  • 1970-01-01
  • 2012-02-20
  • 1970-01-01
  • 2014-05-02
  • 2015-01-27
  • 1970-01-01
相关资源
最近更新 更多