Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 我使用的OLEDB只读取excel工作表的前11行_C#_Oledb_Oledbconnection_Oledbcommand_Oledbdatareader - Fatal编程技术网

C# 我使用的OLEDB只读取excel工作表的前11行

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

我遇到了一个数据读取器对象的问题,该对象似乎只从excel电子表格中读取前11行。我已尝试将OLEDB驱动程序从JET更新为ACE,并尝试将.HasRows子句添加到我的.Read()循环中。似乎什么都不管用。每次都是一样的结果

此Arraylist填充为保存excel文件中的所有数据而创建的对象

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”)方法获取可用的表名,并查看是否存在这种情况。