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

之前在网上搜了关于下载导出二进制字段的资料,发现都不是我想要的,都只是把上传的文件放到服务器然后下载这个文件,并不是把数据库中的二进制使用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();
}

C# asp.net 导出数据库二进制字段到excel的更多相关文章

  1. asp.net导出excel-一行代码实现excel、xml、pdf、word、html、csv等7种格式文件导出功能而且美观-SNF快速开发平台

    分享: 腾讯微博  新浪微博   搜狐微博   网易微博  腾讯朋友  百度贴吧  豆瓣   QQ好友  人人网 作者:王春天  原文地址:http://www.cnblogs.com/spring_ ...

  2. ASP.NET MVC5--为数据库新增字段(涉及数据库迁移技术)

    Setting up Code First Migrations for Model Changes--为模型更改做数据库迁移. 1.打开资源管理器,在App_Data文件夹下,找到movies.md ...

  3. 在sqlserver 中如何导出数据库表结构到excel表格中

    先建空白excel--在数据库中的左侧找到该表, 选中需要导出的数据--Ctrl+C复制--打开记事本修改编码格式为Unicode-不自动换行保存--Ctrl+A--Ctrl+C,再打开excel-- ...

  4. Asp.Net导出文件名中文乱码

    Asp.Net导出word为例,Excel等其他文件也一样 protected void Page_Load(object sender, EventArgs e) {string html = “网 ...

  5. .net mvc 站点自带简易SSL加密传输 Word报告自动生成(例如 导出数据库结构) 微信小程序:动画(Animation) SignalR 设计理念(一) ASP.NET -- WebForm -- ViewState ASP.NET -- 一般处理程序ashx 常用到的一些js方法,记录一下 CryptoJS与C#AES加解密互转

    .net mvc 站点自带简易SSL加密传输   因项目需要,传输数据需要加密,因此有了一些经验,现简易抽出来分享! 请求:前端cryptojs用rsa/aes 或 rsa/des加密,后端.net ...

  6. mysql导出部分(指定)数据库表字段

      需要导出某个表中的部分字段信息 之前导出数据库表一直使用mysqldump命令,例如: mysqldump -hIP -uroot -P3306 -p 库 表 > 名字.sql 但是如果导出 ...

  7. POSTGRESQL 创建表结构、修改字段、导入导出数据库(支持CSV)

    这两个月经常使用postgresql,总结一些经常使用的语句: --创建表 CREATE TABLE customers ( customerid SERIAL primary key , compa ...

  8. mysql导出数据库表名与字段信息

    一.导出数据库表格信息 #mysql导出库的表格信息 SELECT A.TABLE_SCHEMA, A.TABLE_NAME, A.TABLE_ROWS, A.CREATE_TIME, A.TABLE ...

  9. eImage(仅两行代码实现输出从数据库中查询到的二进制字段)标签

    功能: 专门用于向浏览器输出从数据库中查询到的二进制字段.支持通用的几十种文件类型 别名为edoc 使用方法: <chtml><eimage id=书包名type=类型>key ...

随机推荐

  1. OAuth2.0 social_django微博第三方登录

    python网站第三方登录,social-auth-app-django模块, social-auth-app-django模块是专门用于Django的第三方登录OAuth2协议模块 目前流行的第三方 ...

  2. 动态规划:HDU-1203-0-1背包问题:I NEED A OFFER!

    解题心得: 动态规划就是找到状态转移方程式,但是就本题0-1背包问题来说转移方程式很简单,几乎看模板就行了. 在本题来说WA了很多次,很郁闷,因为我记录v[i]的时候i是从0开始的,一些特殊数据就很尴 ...

  3. HashMap的实现原理和底层数据结构

    看了下Java里面有HashMap.Hashtable.HashSet三种hash集合的实现源码,这里总结下,理解错误的地方还望指正 HashMap和Hashtable的区别 HashSet和Hash ...

  4. Js中的undefined和not defined

    1.undefined 已经声明,但未赋值 2.not defined 未声明,报错

  5. Android资源限定符

    Android系统会根据设备参数,自动选择最佳资源配置方案. Android中常见的资源限定符: 屏幕特征 限定符 描述 大小 small 提供给小屏幕设备的资源 normal 提供给中等屏幕设备的资 ...

  6. Asp.net自定义控件开发任我行(6)-嵌入资源下

    摘要 上一章,我们讲了嵌入.css文件,这一章,我们来讲一下嵌入.js文件,也顺带一个嵌入Image文件 内容 我们前面的几章,一运行,下拉框就显示出来了,但是DropDwonList的下拉框是被隐藏 ...

  7. 设计模式之第19章-中介者模式(Java实现)

    设计模式之第19章-中介者模式(Java实现) “测试妹纸找你,你的代码出问题了.”“美工妹纸让你看看界面怎么样.”身为程序员总要和各种人打交道,但是如果再分为前端.后端工程师的话,那么关系就会错综复 ...

  8. 【Edit Distance】cpp

    题目: Given two words word1 and word2, find the minimum number of steps required to convert word1 to w ...

  9. Bit Operation妙解算法题

    5道巧妙位操作的算法题. ***第一道*** 题目描述 给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次.找出那个只出现了一次的元素. 说明: 你的算法应该具有线性时间复杂度. ...

  10. Linux下librtmp使用及编程实战

    最近想做rtmp的推流.直播的小项目,不想直接使用FFmpeg进行推流,FFmpeg进行推流特别简单,因为它已经将编码以及librtmp都集成好了,没啥意思.FFmpeg推流的例子,在雷神的博客里可以 ...