c#中数据从数据库到客户端主要几种的导出方式(导出到excel,导出到word)

  本人大学新手一枚,在大学工作室学习asp.net,从中积累的一些小的知识和大家一起分享与讨论。

  今天的主题是导出数据。现在从服务器端到客户端数据的几种主要方式有:web页面呈现(各种view..),导出到excel,导出到word,导出到报表等。我今天讲下我实际开发项目中用到的导出到excel和导出到word。

  一、导出到excel

  主要有以下两种方法:

(1)用数据展示控件如GridView或者ListView等,先把需要导出的数据展示在web页面上,然后再利用Response的另存为功能,将html页存为Xls格式的Excel文件。

  下面是代码:


protected void btnExport_Click(object sender, EventArgs e)
{

this.dp.pageSize = 9999;//为了导出全部数据,ListView 使用pageSize,但是GridView 可用AllowPaging
this.lvExt.HiddenFields ="c0,c1";//根据id隐藏列
this.lv.DataBind();
Export("application/ms-excel", "场地信息.xls", lv, "场地信息");
this.dp.pageSize = 10;
this.lv.DataBind();
}

protected void btnExport_Load(object sender, EventArgs e)
{
//将控件注册为回发的触发器。
//该方法用于配置 UpdatePanel 控件内以其他方式执行异步回发的回发控件。
ScriptManager sm = ScriptManager.GetCurrent(this.Page);

if (sm != null)
{
sm.RegisterPostBackControl((Control)sender);
}
}

/// <summary>
/// 导出方法 2014-5-30 bob
/// </summary>
/// <param name="FileType">文件类型</param>
/// <param name="FileName">文件名称</param>
/// <param name="c">装载数据的控件如:ListView,GridView</param>
/// <param name="Title">导出文件的标题</param>
public void Export(string FileType, string FileName, System.Web.UI.Control c, string Title)
{
Response.Clear();
Response.Buffer = true;
Response.ContentEncoding = System.Text.Encoding.GetEncoding("GB2312");
Response.AppendHeader("Content-Disposition", "attachment;filename=" + HttpUtility.UrlEncode(FileName, Encoding.UTF8).ToString());
Response.ContentType = FileType; // 设置输出文件类型为excel文件"application/ms-excel"。
System.IO.StringWriter oStringWriter = new System.IO.StringWriter();
System.Web.UI.HtmlTextWriter oHtmlTextWriter = new System.Web.UI.HtmlTextWriter(oStringWriter);
c.RenderControl(oHtmlTextWriter);
string writeString = oStringWriter.ToString();
writeString = "<tr> <td> " + Title + " </td> <tr> " + writeString;
Response.Output.Write(writeString);
Response.Flush();
Response.End();
}

(2)引用Microsoft.Office.Interop.Excel.dll,这种方法我也是借鉴别人的。我给出详细地址:http://blog.csdn.net/yysyangyangyangshan/article/details/7067370

二、导出至Word

  这里讲一下导出到word用到的是word中的文字编辑域工具,就是事先在word中需要导出数据的地方先用文字编辑语站好位置,之后用反射机制根据文字编辑域中的默认文字找到数据库中同样的字段,然后导出至Word,下面是代码:


        protected void btnPrint_Click(object sender, EventArgs e)
{
//2014-6-8 bob 打印证书 从数据库中把数据导出到word

lvExt.VerifySelectRowCount(Common.UserControl.ListViewExtender.SelectCountMode.OnlyOne);

//获得学员基本信息数据集
eTangent.PSMS.PSMSDataContext dc = new eTangent.PSMS.PSMSDataContext();
eTangent.PSMS.vw_PMInfor pmInfors = dc.vw_PMInfors.FirstOrDefault(p => Convert.ToInt32(p.ID).Equals(this.lvExt.SelectedValues.FirstOrDefault()));

//生成证书
Application app = null;
Document docTemp = null;
Document doc = null;

try
{
string docPath =
string.Format("~/Contacts/CertificateDoc/{0}", pmInfors.Card);

if (!System.IO.Directory.Exists(Server.MapPath(docPath)))
{
System.IO.Directory.CreateDirectory(Server.MapPath(docPath));//创建文件夹
}
object templateName = Server.MapPath(string.Format("~/Contacts/CertificateDoc/Template.doc"));

app = new Application(); //启用进程

object nullobj = System.Reflection.Missing.Value;

docTemp = app.Documents.Open(templateName);

object CertificateName = Server.MapPath(
string.Format("{0}/Certificate.doc", VirtualPathUtility.RemoveTrailingSlash(docPath)));

docTemp.SaveAs(ref CertificateName); //把临时doc另存为当前人的证书doc
docTemp.Close(); //ref nullobj,ref nullobj,ref nullobj
// GC.Collect(); //垃圾回收
docTemp = null;
string docCertificateName = Server.MapPath(
string.Format("{0}/Certificate.doc", VirtualPathUtility.RemoveTrailingSlash(docPath)));
doc = app.Documents.Open(docCertificateName);

//基本信息

foreach (FormField f in doc.FormFields.Cast<FormField>())
{
if (f.Result.Equals("PrintTime"))
{
f.Range.Text = DateTime.Now.Date.ToShortDateString();
}
else
{
//反射 (根据外部的doc文档中的文字域的名字来找到数据集pmInfors中对应的属性)
// 其中数据集也可以用dataset来实现
System.Reflection.PropertyInfo propInfo =
pmInfors.GetType().GetProperty(f.Result);

if (propInfo != null)
{
object pValue = propInfo.GetValue(pmInfors, null);

if (pValue != null)
{
f.Range.Text = pValue.ToString();
}
else
{
f.Range.Text = string.Empty;
}
}
else
{
f.Range.Text = string.Empty;
}
}
}

doc.Save();

if (docTemp != null)
{
docTemp.Close();
// GC.Collect();
}
docTemp = null;

if (doc != null)
doc.Close();
doc = null;

if (app != null) app.Quit();

app = null;

// 下载证书
string docPrintPath =
string.Format("~/Contacts/CertificateDoc/{0}//Certificate.doc", pmInfors.Card);
if (File.Exists(Server.MapPath(docPrintPath)))
{
//btSave.PostBackUrl = docPath;
Response.Redirect(docPrintPath); //注意一定要把执行该动作的按钮设置为异步回发(如果按钮在UpdatePanel中)
}

}
catch (Exception ex)
{
System.Diagnostics.EventLog.WriteEntry("党校系统错误",
string.Format("打印证书发生错误: {0}", ex.Message));

object saveOption = Microsoft.Office.Interop.Word.WdSaveOptions.wdDoNotSaveChanges;

if (app != null) app.Quit(ref saveOption);
docTemp = null;
doc = null;
app = null;

throw new Exception(ex.Message);
}
}

protected void btnPrint_PreRender(object sender, EventArgs e)
{

//将控件注册为回发的触发器。
//该方法用于配置 UpdatePanel 控件内以其他方式执行异步回发的回发控件。
ScriptManager sm = ScriptManager.GetCurrent(this.Page);

if (sm != null)
{
sm.RegisterPostBackControl((Control)sender);
}

}

  有人肯定好奇为什么我的两个导出按钮都要注册为异步回发,因为我这是个项目,用到了母版页,母版页中的内容页套了一个UpdatePanel,所以才这么做的。

  好了,终于写完了。肯定有很多理解不到位的地方,毕竟才刚接触.net,望大家批评指正。不管怎么样,希望自己能坚持走下去!

时间: 2024-10-13 05:00:09

c#中数据从数据库到客户端主要几种的导出方式(导出到excel,导出到word)的相关文章

SpringMVC 实现POI读取Excle文件中数据导入数据库(上传)、导出数据库中数据到Excle文件中(下载)

读取Excle表返回一个集合: package com.shiliu.game.utils; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; import java.lang.reflect.Field; import java.lang.reflect

如何将exel表中数据存入到数据库

最近在做一个项目,平台那边有1000多条数据,都存在exel表中,本来也可以在系统里面一条一条录进去,但是这样太慢,那么有什么好的方法,可以把这数据,点几下按钮,就一次性完成呢.本文为原创,如需转载,请著名来源:http://blog.csdn.net/qq_22327455 下面开始详细讲述: 我的做的功能是用户点击上传文件按钮,选定需要的exel文件,然后再选择需要导入的数据表,点击导入,数据就一次性导入. 1. 首先需要下载一个php的exel类包,在百度里输入:phpexcel下载  

大数据量数据库优化 - CodeMain - 博客园

一.数据库结构的设计 如果不能设计一个合理的数据库模型,不仅会增加客户端和服务器段程序的编程和维护的难度,而且将会影响系统实际运行的性能.所以,在一个系统开始实施之前,完备的数据库模型的设计是必须的. 在一个系统分析.设计阶段,因为数据量较小,负荷较低.我们往往只注意到功能的实现,而很难注意到性能的薄弱之处,等到系统投入实际运行一段时间后,才发现系统的性能在降低,这时再来考虑提高系统性能则要花费更多的人力物力,而整个系统也不可避免的形成了一个打补丁工程. 所以在考虑整个系统的流程的时候,我们必须

Java嵌入式数据库H2学习总结(二)——在Web应用程序中使用H2数据库

一.搭建测试环境和项目 1.1.搭建JavaWeb测试项目 创建一个[H2DBTest]JavaWeb项目,找到H2数据库的jar文件,如下图所示: H2数据库就一个jar文件,这个Jar文件里面包含了使用JDBC方式连接H2数据库时使用的驱动类,将"h2-1.4.183.jar"加入到[H2DBTest]项目中,如下图所示: 1.2.开启H2数据库 进入到h2\bin目录,如下图所示: 确保H2数据库使用的8082端口没有被其他应用程序占用,正常启动之后输入"http://

大数据量数据库优化

一.数据库结构的设计 如果不能设计一个合理的数据库模型,不仅会增加客户端和服务器段程序的编程和维护的难度,而且将会影响系统实际运行的性能.所以,在一个系统开始实施之前,完备的数据库模型的设计是必须的. 在一个系统分析.设计阶段,因为数据量较小,负荷较低.我们往往只注意到功能的实现,而很难注意到性能的薄弱之处,等到系统投入实际运行一段时间后,才发现系统的性能在降低,这时再来考虑提高系统性能则要花费更多的人力物力,而整个系统也不可避免的形成了一个打补丁工程. 所以在考虑整个系统的流程的时候,我们必须

大数据量数据库设计与优化方案(SQL优化)

转自:http://blog.sina.com.cn/s/blog_6c0541d50102wxen.html 一.数据库结构的设计 如果不能设计一个合理的数据库模型,不仅会增加客户端和服务器段程序的编程和维护的难度,而且将会影响系统实际运行的性能.所以,在一个系统开始实施之前,完备的数据库模型的设计是必须的. 在一个系统分析.设计阶段,因为数据量较小,负荷较低.我们往往只注意到功能的实现,而很难注意到性能的薄弱之处,等到系统投入实际运行一段时间后,才发现系统的性能在降低,这时再来考虑提高系统性

大数据量数据库设计与优化方案

转自:https://www.cnblogs.com/zuizui1204/p/9197248.html 一.数据库结构的设计 如果不能设计一个合理的数据库模型,不仅会增加客户端和服务器段程序的编程和维护的难度,而且将会影响系统实际运行的性能.所以,在一个系统开始实施之前,完备的数据库模型的设计是必须的. 在一个系统分析.设计阶段,因为数据量较小,负荷较低.我们往往只注意到功能的实现,而很难注意到性能的薄弱之处,等到系统投入实际运行一段时间后,才发现系统的性能在降低,这时再来考虑提高系统性能则要

Kettle Excel导入数据到数据库

最近学习大数据的处理,由于项目开发的需要,使用一种简单的方式来将Excel中的数据导入到数据库中,开发使用的kettle工具. kettle工具安装很简单,从官网上下载下来之后,直接解压到制定的盘符下即可(前提是你配置了JAVA的环境变量,path,classpath). 在WINDOWS环境下双击Spoon.bat文件,出现如下图: 点击如图所示的图标,进行本地文件导入的配置 选择红色线框下的选项,点击确定 按照上面的操作,点击确定即可. 直接点击关闭即可. 通过上面两个地方的任意一个都可以创

Mysql清空表(truncate)与删除表中数据(delete)的区别

近日在做一个区块链积分转代币的APP,牵涉到数据库中表的记录删除问题, 如果一条条删除那可真是累人.遂考虑直接进入mysql直接清空表或者删除表中数据. 本文记录一下这2种操作模式的区别,目标对象是表wp_comments,里面的所有留言均是垃圾留言,均可删除.然后便有了以下2种方式(进入mysql操作界面后): truncate table wp_comments; delete * from wp_comments; 其中truncate操作中的table可以省略,delete操作中的*可以