laudy的博客

人变聪明容易,但想装糊涂可真难
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

读取Excel文件内容到DataSet中的一个方法

Posted on 2007-07-12 15:00  laudy  阅读(781)  评论(0)    收藏  举报

#region 读取Excel文件内容到DataSet中
    private DataSet ReadUniverExcel()
    {
        // 读取Excel数据,填充DataSet
        // 连接字符串           
        string xlsPath = strFilePath + strFileName;
        string connStr = "Provider=Microsoft.Jet.OLEDB.4.0;" +
                        "Extended Properties=\"Excel 8.0;HDR=YES;IMEX=1\";" + // 指定扩展属性为 Microsoft Excel 8.0 (97) 9.0 (2000) 10.0 (2002),并且第一行作为数据返回,且以文本方式读取
                        "data source=" + xlsPath + ";";
        string sql_F = "SELECT * FROM [{0}]";

        OleDbConnection conn = null;
        OleDbDataAdapter da = null;
        DataTable tblSchema = null;
        IList<string> tblNames = null;

        // 初始化连接,并打开
        conn = new OleDbConnection(connStr);
        try
        {
            conn.Open();
        }
        catch(Exception ex)
        {
            throw new Exception();
        }
        // 获取数据源的表定义元数据                       
        //tblSchema = conn.GetSchema("Tables");
        tblSchema = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new object[] { null, null, null, "TABLE" });

        //关闭连接
        conn.Close();

        tblNames = new List<string>();
        foreach (DataRow row in tblSchema.Rows)
        {
            tblNames.Add((string)row["TABLE_NAME"]); // 读取表名
        }

        // 初始化适配器
        da = new OleDbDataAdapter();
        // 准备数据,导入DataSet
        DataSet ds = new DataSet();

        foreach (string tblName in tblNames)
        {
            da.SelectCommand = new OleDbCommand(String.Format(sql_F, tblName), conn);
            try
            {
                da.Fill(ds, tblName);
            }
            catch
            {
                // 关闭连接
                if (conn.State == ConnectionState.Open)
                {
                    conn.Close();
                }
                throw;
            }
        }

        // 关闭连接
        if (conn.State == ConnectionState.Open)
        {
            conn.Close();
        }
        return ds;
    }
    #endregion