使用OLEDB将数据库的数据导入Excel文件

/// <summary>
        /// DataTable中的数据导入到Excel,使用OLEDB,
        /// </summary>
        /// <param name="dt">数据源Table</param>
        /// <param name="excelPath">Excel文件的完整路径</param>
        /// <param name="sheetName">Excel Sheet的名称</param>
        /// <param name="result">导入执行的结果</param>
        /// <returns></returns>
        public bool DataTableToExcel(DataTable dt,string excelPath,string sheetName,out string result)
        {
            string ConnectionString = "Provider=Microsoft.Jet.OleDb.4.0;Data Source={0};Extended ProPerties=Excel 8.0";

            if(dt == null)
            {
                result = "DataTable不能为空";
                return false;
            }

            int rows = dt.Rows.Count;   //行的数量
            int cols = dt.Columns.Count;  //列的数量

            if(rows == 0)
            {
                result =  "没有数据";
                return false;
            }

            StringBuilder sb = new StringBuilder();
            string connString = string.Format(ConnectionString,excelPath);

            //生成创建表的脚本
            sb.Append("CREATE TABLE " + sheetName + " ( ");
           
            for(int i=0;i<cols;i++)
                sb.Append(string.Format("[{0}] varchar,",dt.Columns[i].ColumnName));
            sb.Remove(sb.Length -1,1);  //移除最后一个“,”
            sb.Append(")");    //最后添加一个“)”


            using(OleDbConnection objConn = new OleDbConnection(connString))
            {
                OleDbCommand objCmd = new OleDbCommand(sb.ToString(),objConn);
               
                try
                {
                    objConn.Open();
                    objCmd.ExecuteNonQuery();
                }
                catch(Exception e)
                {
                    result = "在Excel中创建表失败,错误信息:" + e.Message;
                    return false;
                }
                //生成插入数据脚本
                #region 生成插入数据脚本
                sb.Remove(0,sb.Length);
                sb.Append("INSERT INTO " + sheetName + " ( ");
               
                for(int i=0;i<cols;i++)
                    sb.Append("[" + dt.Columns[i].ColumnName + "],");
                sb.Remove(sb.Length -1,1);  //移除最后一个“,”
                sb.Append(") values (");

                for(int i=0;i<cols;i++)
                    sb.Append("@" + dt.Columns[i].ColumnName + ",");
                sb.Remove(sb.Length -1,1); //移除最后一个
                sb.Append(")");

                #endregion

                //建立插入动作的Command
                objCmd.CommandText = sb.ToString();
                OleDbParameterCollection param = objCmd.Parameters;

                for(int i=0;i<cols;i++)
                {
                    param.Add(new OleDbParameter("@" + dt.Columns[i].ColumnName, OleDbType.VarChar));
                }

                //遍历DataTable将数据插入新建的Excel文件中
                foreach (DataRow row in dt.Rows)
                {   
                    for (int i=0; i<param.Count; i++)
                    {
                        param[i].Value = row[i];
                    }

                    objCmd.ExecuteNonQuery();
                }

                result =  "数据已成功导入Excel";
                return true;
            }//end using
        }
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值