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

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

    容斥原理公式:这里就需要用到容斥原理了,公式就是:n/2+n/3+n/5-n/(2*3)-n/(2*5)-n/(3*5)+n/(2*3*5). 求的是多个重合区间的里面的数字个数. 解题心得: 1.一 ...

  2. [Poj3281]Dining(最大流)

    Description 有n头牛,f种食物,d种饮料,每头牛有nf种喜欢的食物,nd种喜欢的饮料,每种食物如果给一头牛吃了,那么另一个牛就不能吃这种食物了,饮料也同理,问最多有多少头牛可以吃到它喜欢的 ...

  3. [转]webservice 采用SSL实现加密传输

    本文转自:http://book.51cto.com/art/200906/129770.htm http://yeweiyun868.blog.163.com/blog/static/5637844 ...

  4. 【Gitlab+Jenkins+Ansible】构建自动化部署

    说明: Gitlab.Jenkins.生产服务器.测试服务器上都需要安装Git. 一.安装Gitlab 1.主机配置 IP: 10.10.10.105 OS: CentOs7. Gitlab版本:gi ...

  5. Python框架之Django学习笔记(一)

    Django历史: Django 是从真实世界的应用中成长起来的,它是由 堪萨斯(Kansas)州 Lawrence 城中的一个 网络开发小组编写的. 它诞生于 2003 年秋天,那时 Lawrenc ...

  6. AppDOMain(摘录)

    AppDomain是CLR的运行单元,它可以加载Assembly.创建对象以及执行程序. AppDomain是CLR实现 代码隔离 的基本机制. 每一个AppDomain可以单独运行.停止:每个App ...

  7. jquery ajax return jsonresult pattern

    //javascriptvar queryParams = {    "userId": userId,    "factoryId": factoryId } ...

  8. python-day5-装饰器第二弹之多层装饰器

    多层装饰器 #首先我们先实现一个简单的登陆与权限验证功能,注意看执行结果 USER_INFO = {} def check_login(func): def inner(*args,**kwargs) ...

  9. JQuery向ashx提交中文参数方案 [转]

    转自:http://blog.csdn.net/wangqiuyun/article/details/8450964 字符编码这个东西,一旦和中文打上交道就不可避免出现乱码,今天项目用到了JQuery ...

  10. activemq 简单聊天

    有兴趣加群qq:200634530