我正在使用OleDB DataReader从我的excel文件中获取数据(但是这个问题也出现在DataTable.Fill中).问题是我有一个应该返回字符串的列.一切都很好并且工作但是最近出现了一个问题,因为列的单元格具有不同的格式.有些是数字,有些是文本.当我使用dataReader.GetSchema()检查时,它显示有问题的列被推断为类型System.String.这个问题是所有非文本单元格都立即设置为null.
有没有办法向读者建议该列应该只是将列解析为System.Object而不是将其推断为System.String并转储所有非字符串单元格?
我正在使用的连接字符串是:
string connString ="Provider = Microsoft.Jet.OLEDB.4.0;" +"数据源="+ filePath +";" +"扩展属性= Excel 8.0;";
而代码是:
using ( OleDbConnection connection = new OleDbConnection( connString ) )
{
connection.Open();
foreach ( string worksheetName in worksheetNames )
{
using ( OleDbCommand command =
new OleDbCommand( "SELECT * FROM [" + worksheetName + "]", connection ) )
{
TEntity entity;
using ( OleDbDataReader dataReader = command.ExecuteReader() )
{
while ( dataReader.Read() )
{
entity = GetDataFromDataTable( dataReader );
if ( entity != null )
{
entityList.Add( entity );
}
}
}
}
}
connection.Close();
}
Run Code Online (Sandbox Code Playgroud)
您需要将IMEX或MAXSCANROWS添加到连接字符串.
MAXSCANROWS - 要扫描的行数,以确定每列的数据类型.根据找到的最大数据类型确定数据类型.如果遇到的数据与为该列猜测的数据类型不匹配,则数据类型将作为NULL值返回.
对于Microsoft Excel驱动程序,您可以输入1到16之间的数字来扫描行.该值默认为8; 如果设置为0,则扫描所有行.(超出限制的数字将返回错误.)
此外,请查看位于注册表REG_DWORD"TypeGuessRows"的[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Jet\4.0\Engines\Excel].这是不让Excel仅使用前8行来猜测列数据类型的关键.将此值设置为0可扫描所有行.这可能会影响性能.
| 归档时间: |
|
| 查看次数: |
2155 次 |
| 最近记录: |