【问题标题】:OleDbDataAdapter datatype mismatch using Jet使用 Jet 的 OleDbDataAdapter 数据类型不匹配
【发布时间】:2011-09-11 13:03:18
【问题描述】:

我正在使用 OleDbDataAdapter(准确地说是 Microsoft.ACE.OLEDB.12.0)从 Excel 工作簿中检索数据。对于一个表,我使用的是类型化数据集,但对于另一个表,我不能这样做,因为列数是未知的(Excel 模板可能会生成额外的列)。

问题在于,如果有人在一列中输入了太多数值,“JET”似乎会假定它是一个数字列,并且不再加载文本值。我知道您可以更改模板并为该列设置特定的数据类型,但模板已经广泛传播,所以我宁愿在导入时解决它。

现在我尝试首先计算已使用列的数量,并准备一个具有已定义 Columns 集合的新 DataTable,并将其 DataType 属性设置为 typeof(string)。可悲的是,JET 似乎并没有看到这一点,仍然选择了自己的方式。我猜即使我可以在这里使用强类型数据集,它也无济于事......

有人知道如何告诉 JET 如何导入数据,这样我就不必面对交付新模板版本的负担了吗?

**:不要附带 Excel 自动化解决方案...

【问题讨论】:

    标签: c# excel dataset oledb jet


    【解决方案1】:

    如果您有权访问注册表,请设置 TypeGuessRows=0 和/或 ImportMixedTypes=Text。请参阅此处了解更多信息INITIALIZATION SETTINGS

    【讨论】:

    • 我发现你也可以在我的 oledb 连接字符串的扩展属性中设置它们,这样确实可以解决我的问题。我还需要设置 IMEX=1 才能使其正常工作...
    • 事实上,只有设置 IMEX=1 就可以了。似乎那些“初始化设置”并没有真正影响连接......
    • @Koen IMEX 和 HDR 可以在扩展属性中设置,但我确定 TypeGuessRows 是仅注册表设置。这取决于数据的布局以及影响设置效果的数据类型混合发生的位置。
    • 永远不要在注册表中更改可以在运行时更改的内容。事实上,我认为几乎不应该为这样的事情编辑注册表,因为您永远不知道您碰巧正在更​​改的设置可能存在哪些依赖关系。
    猜你喜欢
    • 2023-01-31
    • 2013-07-07
    • 2021-08-18
    • 2020-08-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多