繁体   English   中英

Oledb 在服务器上读取多个 excel 文件导致类型错误

[英]Oledb reading multiple excel files on server causes type error

最初,我在处理喷气驱动程序(通过 oledb)时遇到了数据类型“猜测”的问题。 如果工作表具有混合类型,则会引入空值/空值。

-编辑-

连接字符串和注册表中有一个 IMEX 设置,它会告诉 jet/ace 对具有多种数据类型的列使用文本。 这样,如果前 6 行具有整数值而第 7 个单元格具有文本值,则不会出现类型转换失败。 注册表(和连接字符串)中还有一个设置,可让您说明 jet 应使用多少行进行采样。

-结束编辑-

我更改了连接字符串和服务器上的注册表设置。 所以现在程序读取正常。 它将读取值作为文本,而不使用 {n} 行进行采样。 我认为它工作正常。

现在我有一个数据源,它列出了要读取的文件。 如果我在那里有多个文件,它将具有相同的类型转换问题……或者至少是相同的症状。 如果我一次上传一个文件而不使用队列,那么它工作正常。 当我连续有多个文件时,它似乎存在类型转换问题。

我不确定是什么原因导致在连续读取多个文件时发生这种情况,但在一次读取一个文件时则不确定。 连接打开,读取所有数据,然后关闭……所以我认为这与此无关。

我只是在寻找任何想法? 找到原来的问题已经够难的了。 与 Jet 一起工作似乎要求屁股痛。


根据要求添加相关代码

public static readonly String CONNECTION_STRING = "Provider=Microsoft.ACE.OLEDB.12.0;Data   Source={0};Extended Properties=\"Excel 12.0 Xml;HDR=YES; ReadOnly=True;IMEX=1;\"";

private System.Data.DataTable Query(String worksheetName, String selectList = "*")
{
    DataTable table = new DataTable();

    _connection.Open();
    var query = String.Format(Constants.DATA_QUERY, selectList, worksheetName);
    new OleDbDataAdapter(query, _connection).Fill(table);
    _connection.Close();
    return table;
}

如果可能,我建议使用本机库,例如Excel Data ReaderEPPlus而不是 OLEDB

我在这里找到了解决方案

https://www.codeproject.com/Tips/702769/How-to-Get-Data-from-Multiple-Workbooks-using-One

提供者设置:

"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\path\fileName1.xls;Extended Properties=""Excel 8.0;HDR=Yes;IMEX=1"";"

SQL 语句必须像这样设置:

Select * From[Hoja1$]
UNION ALL
Select * From [Hoja1$] IN 'C:\path\fileName2.xls' 'Excel 8.0;HDR=Yes;IMEX=1'

如果你想进行内连接

Select * from [Hoja1$] as a
INNER JOIN (select * from [Hoja1$] IN 'C:\path\fileName2.xls' 'Excel 8.0;HDR=Yes;IMEX=1') as b
ON a.FOLIO=b.FOLIO

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM