当前方法代码为:void GetDataset(string strxlsFileName) {
            OledbCommon oledb = new OledbCommon(strxlsFileName, true);
            List<string> sheets = oledb.GetSheetNames();            //add sheet.
            string pageKey = null;
            string sql = null;
            DataTable t = null;
            foreach (string sheet in sheets) {
                pageKey = sheet.Substring(0, sheet.Length - 1);
                tab_ctrl.TabPages.Add(pageKey);
                DataGridView d = new DataGridView();
                d.Dock = DockStyle.Fill;
                sql = "select * from [" + sheet + "]";
                t = oledb.GetDataTable(sql, oledb.GetConnection());
                d.DataSource = t;
                tab_ctrl.TabPages[pageKey].Controls.Add(d);
            }
        }辅助类OledbCommon我定义为:using System;
using System.Collections.Generic;
using System.Data.OleDb;
using System.Data;namespace Oledb
{
    /// <summary>
    /// 连接 excel(支持.xlsx).
    /// </summary>
    class OledbCommon
    {
        public enum Version { XLS, XLSX }    //保留:不同版本差异.        public string FileName { get; private set; }        //连接字符串.
        private string connectString = null;
        public string ConnectString { get { return connectString; } }        /// <summary>
        /// if contains header.
        /// </summary>
        readonly bool hasHeader = false;
        public bool HasHeader { get { return hasHeader; } }        /// <summary>
        /// Initialize connection string.
        /// </summary>
        /// <param name="fileName">full file name.</param>
        /// <param name="hasHeader">ture if the .xls file contains header;otherwise false.</param>
        public OledbCommon(string fileName, bool hasHeader)
        {
            if (string.IsNullOrEmpty(fileName)) throw new ArgumentNullException("fileName");
            FileName = fileName;
            this.hasHeader = hasHeader;
            connectString = string.Format("Provider=Microsoft.ACE.OLEDB.12.0;Data Source='{0}';", FileName);            //specify it contains header.
            if (HasHeader)
                connectString += "Extended Properties='Excel 12.0 Xml;HDR=YES'";
            else
                connectString += "Extended Properties='Excel 12.0 Xml;'";
        }        /// <summary>
        /// 获得"连接对象'.
        /// </summary>
        /// <returns></returns>
        public OleDbConnection GetConnection()
        {
            return new System.Data.OleDb.OleDbConnection(connectString);
        }        /// <summary>
        /// 获得数据集-根据'sql'语句和连接对象..
        /// </summary>
        /// <param name="sql">值得注意的是,表名后面要有'$'符号.如,select * from [t$]</param>
        /// <param name="connection"></param>
        /// <returns></returns>
        public DataSet GetDataSet(string sql, OleDbConnection connection)
        {            OleDbDataAdapter adapter = new OleDbDataAdapter(sql, connection);
            DataSet set = new DataSet();
            adapter.Fill(set);
            return set;
        }        public DataTable GetDataTable(string sql, OleDbConnection connection) {
            OleDbDataAdapter adapter = new OleDbDataAdapter(sql, connection);
            DataTable t = new DataTable();
            adapter.Fill(t);
            return t;
        }        /// <summary>
        /// Get DataRows by specified column-name.
        /// </summary>
        /// <param name="set">The input set.</param>
        /// <param name="columnName">The specified column-name</param>
        /// <returns></returns>
        public List<DataRow> GetDataRow(DataSet set, string columnName)
        {
            DataTable t = set.Tables[0];    //get the first table as default.
            List<DataRow> rows = new List<DataRow>();
            foreach (DataRow r in t.Rows)
            {
                rows.Add((DataRow)r[columnName]);
            };
            return rows;
        }        /// <summary>
        /// 执行Reader方法:注意,执行这个方法需要重写本类的'ExecuteWithinReader'方法,该方法默认为空实现.
        /// </summary>
        /// <param name="sql"></param>
        public void ExecuteReader(string sql)
        {
            using (OleDbConnection conn = GetConnection())
            {
                conn.Open();
                using (OleDbCommand cmd = conn.CreateCommand())
                {
                    cmd.CommandText = sql;
                    using (OleDbDataReader r = cmd.ExecuteReader())
                    {
                        while (r.Read())
                        {
                            ExecuteWithinReader();  //需要在子类中重写这个方法.
                        }   //while.
                    }   //cmd.
                }
            }   //connection.
        }        /// <summary>
        /// 在Reader中待实现的代码.例如,计数器的增加,或取得某字段的值等.
        /// </summary>
        protected virtual void ExecuteWithinReader()
        {
            //todo:例如,计数器的增加,或取得某字段的值.
        }        /// <summary>
        /// 获取全部Sheet名.
        /// </summary>
        /// <returns></returns>
        public List<string> GetSheetNames()
        {
            List<string> namesResult = new List<string>();  //存储结果.
            using (OleDbConnection conn = GetConnection())
            {
                conn.Open();
                DataTable sheetNames = conn.GetOleDbSchemaTable
           (System.Data.OleDb.OleDbSchemaGuid.Tables, new object[] { null, null, null, "TABLE" });
                foreach (DataRow dr in sheetNames.Rows)
                {
                    namesResult.Add(dr[2].ToString());
                }
            }            return namesResult;
        }
    }
}