最初我遇到了数据类型的问题"猜测"在处理喷气式飞机时(通过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;
}
答案 0 :(得分:0)
如果可能的话,我建议使用本地库,例如Excel Data Reader或EPPlus而不是OLEDB
答案 1 :(得分:-1)
我在这里找到了解决方法
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