zoukankan      html  css  js  c++  java
  • C# asp.net 导出数据库二进制字段到excel

    前台的话不多说,本次只详细说下后台导出数据库中的二进制字段,上传下次有时间再说,有比较急的可以留言我

    之前在网上搜了关于下载导出二进制字段的资料,发现都不是我想要的,都只是把上传的文件放到服务器然后下载这个文件,并不是把数据库中的二进制使用excel导出,下面我就贴出下我自己写的方法,可以供给需要的人,当然也有大牛可能比我写的好,您可以选择不看或提点下建议!

    最后本文数原创,转载请注明出处或链接!

    /// <summary>
    /// 下载卡券导入日志
    /// </summary>
    /// <param name="e"></param>
    private void EditBLL(DataGridCommandEventArgs e)
    {
    if (e.CommandName == "DownLoad")//e 前台绑定事件commandName
    {
    String sFileId = e.Item.Cells[0].Text.Trim();
    VirtualCouponsManagebll bll = new VirtualCouponsManagebll();
    DataTable dt = bll.GetCardcouponsFileLogToExcel(sFileId);//查询出数据
    if (dt.Rows.Count <= 0)
    {
    MessageBox("查询卡券导入日志失败");
    return;
    }
    string sGoodsName = dt.Rows[0]["GoodsName"].ToString();
    string sCreateTime = Convert.ToDateTime(dt.Rows[0]["CreateDate"].ToString()).ToString("yyyyMMddHHmmss");
    string sFileName = sGoodsName + sCreateTime + ".xlsx";
    DataSet ds = StreamConvertDataSet((byte[])dt.Rows[0]["CardCouponsFile"], sFileName);
    if (ds == null || ds.Tables[0].Rows.Count <= 0)
    {
    MessageBox("卡券数据由byte数组转DataSet失败");
    return;
    }
    ExportTableStrBul(ds.Tables[0], "虚拟商品:" + sGoodsName + "_卡券导入数据", sCreateTime);
    }
    }

    /// <summary>
    /// byte数组转成DataSet
    /// </summary>
    /// <param name="bytes"></param>
    /// <param name="sFileName"></param>
    /// <returns></returns>
    private DataSet StreamConvertDataSet(byte[] bytes, string sFileName)
    {
    MemoryStream _MStream = new MemoryStream(bytes);
    string path = AppDomain.CurrentDomain.DynamicDirectory + sFileName;
    System.IO.FileStream Filestream = new System.IO.FileStream(path, System.IO.FileMode.Create);
    _MStream.CopyTo(Filestream);
    IExcelDataReader excelReader = null;
    DataSet ds = null;

    try
    {
    excelReader = ExcelReaderFactory.CreateOpenXmlReader(Filestream);

    excelReader.IsFirstRowAsColumnNames = true;
    ds = excelReader.AsDataSet();
    }
    catch (Exception)
    {
    Filestream.Close();
    _MStream.Close();
    excelReader.Close();
    }
    finally
    {
    excelReader.Close();
    Filestream.Close();
    _MStream.Close();
    if (File.Exists(path))
    {
    File.Delete(path);
    }
    }
    return ds;
    }

    /// <summary>
    /// 生成EXCEL
    /// </summary>
    /// <param name="dt">数据</param>
    /// <param name="sFileName">文件名</param>
    /// <param name="sCreateTime">文件名</param>
    public void ExportTableStrBul(DataTable dt, string sFileName, string sCreateTime)
    {
    Response.Clear();
    Response.Buffer = true;
    Response.Charset = "GB2312";
    Response.AppendHeader("Content-Disposition", "attachment;filename=" + HttpUtility.UrlEncode(sFileName) + sCreateTime + ".xls");
    Response.ContentEncoding = System.Text.Encoding.GetEncoding("GB2312");//设置输出流为简体中文
    Response.ContentType = "application/ms-excel";//设置输出文件类型为excel文件。
    EnableViewState = false;

    DataView view = dt.DefaultView;
    string[] strArr = { "卡券", "结束日期" };//"TotalRMB",
    //从 DataView 创建新的 DataTable,可以使用 ToTable 方法将所有行和列或数据的一个子集复制到新的 DataTable 中
    DataTable newTable = view.ToTable("DownTab",
    true, strArr);

    dt = newTable;

    StringBuilder sb = new StringBuilder();
    int count = 0;

    //--写入EXCEL
    sb.AppendLine("<meta http-equiv="Content-Type" content="text/html; charset=gb2312">");
    sb.AppendLine("<table cellspacing="0" cellpadding="5" rules="all" border="1">");
    //写出列名
    sb.AppendLine("<tr style="font-weight: bold; white-space: nowrap;">");
    foreach (DataColumn column in dt.Columns)
    {
    sb.AppendLine("<td>" + column.ColumnName + "</td>");
    }
    sb.AppendLine("</tr>");
    sb = sb.Replace("卡券", "卡券");
    sb = sb.Replace("结束日期", "结束日期");

    //写出数据
    foreach (DataRow row in dt.Rows)
    {
    sb.Append("<tr>");
    foreach (DataColumn column in dt.Columns)
    {
    if (column.ColumnName.Equals("卡券"))
    {
    sb.Append("<td style="vnd.ms-excel.numberformat:@">" + ReplaceChar(row[column].ToString()) + "</td>");
    }
    else
    {
    sb.Append("<td>" + row[column].ToString() + "</td>");
    }
    }
    sb.AppendLine("</tr>");
    count++;
    }
    sb.AppendLine("</table>");

    Response.Write(sb.ToString());
    Response.End();
    }

  • 相关阅读:
    Linux下Java环境安装
    Go语言学习之10 Web开发与Mysql数据库
    Go语言学习之9 网络协议TCP、Redis与聊天室
    Redis入门指南之三(入门)
    Redis入门指南之一(简介)
    Go语言学习之8 goroutine详解、定时器与单元测试
    Redis入门指南之二(安装及配置)
    Go语言学习之7 接口实例、终端文件读写、异常处理
    Go语言学习之6 反射详解
    Go语言学习之5 进阶-排序、链表、二叉树、接口
  • 原文地址:https://www.cnblogs.com/bruceli-net/p/4970772.html
Copyright © 2011-2022 走看看