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();
}
C# asp.net 导出数据库二进制字段到excel的更多相关文章
- asp.net导出excel-一行代码实现excel、xml、pdf、word、html、csv等7种格式文件导出功能而且美观-SNF快速开发平台
分享: 腾讯微博 新浪微博 搜狐微博 网易微博 腾讯朋友 百度贴吧 豆瓣 QQ好友 人人网 作者:王春天 原文地址:http://www.cnblogs.com/spring_ ...
- ASP.NET MVC5--为数据库新增字段(涉及数据库迁移技术)
Setting up Code First Migrations for Model Changes--为模型更改做数据库迁移. 1.打开资源管理器,在App_Data文件夹下,找到movies.md ...
- 在sqlserver 中如何导出数据库表结构到excel表格中
先建空白excel--在数据库中的左侧找到该表, 选中需要导出的数据--Ctrl+C复制--打开记事本修改编码格式为Unicode-不自动换行保存--Ctrl+A--Ctrl+C,再打开excel-- ...
- Asp.Net导出文件名中文乱码
Asp.Net导出word为例,Excel等其他文件也一样 protected void Page_Load(object sender, EventArgs e) {string html = “网 ...
- .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 ...
- mysql导出部分(指定)数据库表字段
需要导出某个表中的部分字段信息 之前导出数据库表一直使用mysqldump命令,例如: mysqldump -hIP -uroot -P3306 -p 库 表 > 名字.sql 但是如果导出 ...
- POSTGRESQL 创建表结构、修改字段、导入导出数据库(支持CSV)
这两个月经常使用postgresql,总结一些经常使用的语句: --创建表 CREATE TABLE customers ( customerid SERIAL primary key , compa ...
- mysql导出数据库表名与字段信息
一.导出数据库表格信息 #mysql导出库的表格信息 SELECT A.TABLE_SCHEMA, A.TABLE_NAME, A.TABLE_ROWS, A.CREATE_TIME, A.TABLE ...
- eImage(仅两行代码实现输出从数据库中查询到的二进制字段)标签
功能: 专门用于向浏览器输出从数据库中查询到的二进制字段.支持通用的几十种文件类型 别名为edoc 使用方法: <chtml><eimage id=书包名type=类型>key ...
随机推荐
- OAuth2.0 social_django微博第三方登录
python网站第三方登录,social-auth-app-django模块, social-auth-app-django模块是专门用于Django的第三方登录OAuth2协议模块 目前流行的第三方 ...
- 动态规划:HDU-1203-0-1背包问题:I NEED A OFFER!
解题心得: 动态规划就是找到状态转移方程式,但是就本题0-1背包问题来说转移方程式很简单,几乎看模板就行了. 在本题来说WA了很多次,很郁闷,因为我记录v[i]的时候i是从0开始的,一些特殊数据就很尴 ...
- HashMap的实现原理和底层数据结构
看了下Java里面有HashMap.Hashtable.HashSet三种hash集合的实现源码,这里总结下,理解错误的地方还望指正 HashMap和Hashtable的区别 HashSet和Hash ...
- Js中的undefined和not defined
1.undefined 已经声明,但未赋值 2.not defined 未声明,报错
- Android资源限定符
Android系统会根据设备参数,自动选择最佳资源配置方案. Android中常见的资源限定符: 屏幕特征 限定符 描述 大小 small 提供给小屏幕设备的资源 normal 提供给中等屏幕设备的资 ...
- Asp.net自定义控件开发任我行(6)-嵌入资源下
摘要 上一章,我们讲了嵌入.css文件,这一章,我们来讲一下嵌入.js文件,也顺带一个嵌入Image文件 内容 我们前面的几章,一运行,下拉框就显示出来了,但是DropDwonList的下拉框是被隐藏 ...
- 设计模式之第19章-中介者模式(Java实现)
设计模式之第19章-中介者模式(Java实现) “测试妹纸找你,你的代码出问题了.”“美工妹纸让你看看界面怎么样.”身为程序员总要和各种人打交道,但是如果再分为前端.后端工程师的话,那么关系就会错综复 ...
- 【Edit Distance】cpp
题目: Given two words word1 and word2, find the minimum number of steps required to convert word1 to w ...
- Bit Operation妙解算法题
5道巧妙位操作的算法题. ***第一道*** 题目描述 给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次.找出那个只出现了一次的元素. 说明: 你的算法应该具有线性时间复杂度. ...
- Linux下librtmp使用及编程实战
最近想做rtmp的推流.直播的小项目,不想直接使用FFmpeg进行推流,FFmpeg进行推流特别简单,因为它已经将编码以及librtmp都集成好了,没啥意思.FFmpeg推流的例子,在雷神的博客里可以 ...