【问题标题】:IMEX in OleDbConnectionOleDbConnection 中的 IMEX
【发布时间】:2012-11-01 16:36:30
【问题描述】:

我正在尝试将 excel 文件读入 DataTable,但 IMEX 驱动程序并未读取列中的所有数据。这有什么问题?

OleDbConnection dCon = new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + fileName + ";Extended Properties=HDR=YES;Excel 12.0;IMEX=1");

这里是代码。

OleDbConnection dCon = new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" +
            fileName + ";Extended Properties=HDR=YES;Excel 12.0;IMEX=1");

OleDbDataAdapter dAdp = new OleDbDataAdapter("SELECT * FROM [Sheet1$]", dCon);
dAdp.TableMappings.Add("tbl", "Table");
dAdp.Fill(dSet);
DataTable dT = dSet.Tables[0];

for (int i = 0; i < dT.Rows.Count; i++)
{
     //code for getting the values.
}

【问题讨论】:

  • 您使用什么查询来获取数据?
  • 你能给我们看更多你的代码吗?另外,您要阅读多少列,又要返回多少列?
  • 我已经编辑了我的帖子并添加了代码以供参考。

标签: c# excel connection-string oledb


【解决方案1】:

问题是这样做的字符数限制为 255 个。

您可能需要考虑使用Microsoft.Office.Interop.Excel 程序集以获得更好的解决方案。

http://www.dotnetperls.com/excel

【讨论】:

  • 每列伴侣。您的 DataTable 列缺少数据,因为它使用此方法仅传递前 255 个字符。
  • 嗯,好的,但该列仅包含一个两位数。它被格式化为 excel 文件中的文本。
  • 好的,您的意思是缺少行吗?
  • 实际上并没有,一些值被捕获,但那些具有文本格式的单元格没有被捕获。
  • 好的,所以文本格式的单元格只包含 2 位数字?
【解决方案2】:

我意识到这对于 OP 来说有点晚了,但是因为我遇到了它,所以我想补充一点,我认为扩展属性部分在此示例中格式不正确。扩展属性需要单独括在自己的引号中,以便进行适当处理。

OP 示例使用了这个

OleDbConnection dCon = new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" +
        fileName + ";Extended Properties=HDR=YES;Excel 12.0;IMEX=1");

我认为应该是这样的

OleDbConnection dCon = new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" +
        fileName + ";Extended Properties=\"HDR=YES;Excel 12.0;IMEX=1\"");

由于这种格式错误的连接,可能无法识别 IMEX 属性。

有关可能的连接字符串语法选项(包括扩展属性的选项)的信息,请参阅this MS article

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-07-05
    • 2014-05-01
    • 2016-05-19
    • 2012-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多