【问题标题】:OLEDB connection does not read data from excel sheetOLEDB 连接不从 Excel 表中读取数据
【发布时间】:2010-03-15 06:14:48
【问题描述】:

我遇到了一个奇怪的问题。我正在使用 OLEDB 进行 excel 连接 连接字符串 = Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\Execute.xls;Extended Properties=Excel 8.0;");

excel 文件包含具有字符串/整数值的列。 问题是有时连接从工作表中读取值绝对没问题,但有时它会错过一些数据值并将它们显示为 System.DBNull。 行为非常不一致。 请帮忙。

【问题讨论】:

    标签: c#


    【解决方案1】:

    【讨论】:

    • 我还有一列看似混合的数字/文本数据类型,我只是想将其视为文本。使它对我有用的事情是将 IMEX=1 添加到连接字符串中的选项中。
    【解决方案2】:

    我的第一个猜测是检查您的区域参数。数字格式会因地区设置而异,这可能会导致问题。虽然 Excel 应该会自动为您管理它,但有时它不会因为它感到困惑或其他原因,然后呈现一些奇怪的数据,例如那些 DBNull 值。

    【讨论】:

      【解决方案3】:

      这是你的问题。 IIRC,驱动程序只读取前 8 行数据,并据此确定列的数据类型。

      假设在第 1 列的前 8 行中,您只有数字。驱动程序将决定该列是一个整数。然后,如果它在第 9 行遇到一个字符串,它将无法将其转换为整数并因此返回 DBNull 给您。

      你可以做几件事。

      • 预处理您的电子表格并将所有内容转换为字符串
      • 有一个注册表项(该位置目前我不知道),它允许您增加驱动程序用于确定数据类型的行数。
      • 使用商业 Excel 阅读器控件
      • 通过 Excel 互操作库打开工作表并自行读取单元格

      【讨论】:

      • 感谢您的回复。现在我已将列类型从“一般”更改为“文本”。但仍然存在同样的问题.. 它仍然没有采用数值并将它们显示为 System.DB Null... 有什么解决方案吗?
      【解决方案4】:

      使用此代码

      string pathcpnn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source =" + textBox1.Text + ";Extended Properties=\""Excel 8.0;HDR=Yes;IMEX=1;";";
      
      OleDbConnection con = new OleDbConnection(pathcpnn);
      
      OleDbDataAdapter myDataAdapter = new OleDbDataAdapter("Select * from[" + textBox2.Text + "$]", con);
      
      myDataAdapter.Fill(dt);
      
      DAtagridview1.datasource=dt;
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-06-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多