[英]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 Reader或EPPlus而不是 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.