C# 我使用的OLEDB只读取excel工作表的前11行
我遇到了一个数据读取器对象的问题,该对象似乎只从excel电子表格中读取前11行。我已尝试将OLEDB驱动程序从JET更新为ACE,并尝试将.HasRows子句添加到我的.Read()循环中。似乎什么都不管用。每次都是一样的结果 此Arraylist填充为保存excel文件中的所有数据而创建的对象C# 我使用的OLEDB只读取excel工作表的前11行,c#,oledb,oledbconnection,oledbcommand,oledbdatareader,C#,Oledb,Oledbconnection,Oledbcommand,Oledbdatareader,我遇到了一个数据读取器对象的问题,该对象似乎只从excel电子表格中读取前11行。我已尝试将OLEDB驱动程序从JET更新为ACE,并尝试将.HasRows子句添加到我的.Read()循环中。似乎什么都不管用。每次都是一样的结果 此Arraylist填充为保存excel文件中的所有数据而创建的对象 public ArrayList LoadCensusFromExcelFile( string fPath) { System.Data.OleDb.OleDbConnection conn = n
public ArrayList LoadCensusFromExcelFile( string fPath)
{
System.Data.OleDb.OleDbConnection conn = new OleDbConnection() ;
conn.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + `
`fPath + ";Extended Properties=\"Excel 8.0;HDR=Yes;\";" ;
try
{
conn.Open() ;
}
catch (OleDbException ex)
{
conn.Close();
conn.Dispose();
throw (ex);
}
catch( System.Exception openFailed )
{
_errorMessage = "Could not open workbook: " + openFailed.ToString() ;
Log.LogMessage(openFailed,"Census Excel Upload Failed {0}","Connect String: " + conn.ConnectionString + "Message: " + openFailed.ToString());
return null ;
}
ArrayList census = new ArrayList() ;
try
{
census = _loadCensus(conn) ;
}
catch( System.Exception e )
{
_errorMessage = "Uncaught CensusImport._loadCensus() exception: " + e.ToString() ;
Log.LogMessage(e,"Census Excel Upload Failed {0}",e.ToString());
return null ;
}
//这是reader对象的声明和excel工作表的查询
private ArrayList _loadCensus( OleDbConnection conn )
{
System.Data.OleDb.OleDbDataReader rdr = null ;
try
{
OleDbCommand cmd = new OleDbCommand( "select * from Census", conn ) ;
rdr = cmd.ExecuteReader() ;
}
catch ( System.Exception e )
{
_errorMessage = "Could not execute select statement: " + e.ToString() ;
Log.LogMessage(e,"Census Excel Upload Failed {0}",e.ToString());
return null ;
}
return _loadCensusData( rdr ) ;
}
最后,此ArrayList填充excel工作表中的所有数据。它循环直到到达第11行,并且开始返回空值
rdr2String是一个自定义方法,它将读取器对象中的所有索引值转换为字符串
private ArrayList _loadCensusData( OleDbDataReader rdr )
{
ArrayList censusList = new ArrayList() ;
CensusVO census ;
string FirstName ;
string LastName ;
string[] BirthDate = new string[2];
string AppAge ;
string AppGender ;
while (rdr.Read())
{
census = new CensusVO() ;
FirstName = rdr2String(rdr,0,50) ;
LastName = rdr2String(rdr,1,50) ;
BirthDate[0] = rdr2String(rdr,2,30) ;
AppAge = rdr2String(rdr,3,30) ;
AppGender = rdr2String(rdr,4,1) ;
censusList.Add(census);
}
return censusList ;
}
我不想让你重写这个,但你不应该用OLE来读取Excel文件。看看一个更简单的方法来处理阅读和书写电子表格。如果你尝试在web场景中运行此功能,那么Office不是为在服务器上运行而构建的,这一事实将给你带来太多的麻烦。我不确定我是否同意。不可能总是使用第三方工具,当然也不可能总是安装Office来使用互操作。在这些情况下,OLEDB是最好的也是唯一的解决方案。我尽量不使用任何第三方工具。因此,我使用OLEDB编写它。您的“Select*From Census”让我认为这是电子表格中的命名范围,而不是工作表。工作表名称通常以$结尾。使用连接的GetSchema(“Tables”)方法获取可用的表名,并查看是否存在这种情况。