C#数据库数据导入导出系列之二 数据库导出到Excel上
在日常的项目中,Excel,Word,txt等格式的数据导入到数据库中是很常见的,我在这里做一下总结
这里将分为Asp.net导入Sql Server,Oracle数据库和WinForm导入Sql Server,Oracle数据库
1,使用DataGird生成Excel
基本思想:
(1)将数据从数据库中查询出来,绑定到DataGrid控件中,这个DataGirdle控件知识作为数据的一个承载,不需要显示在页面中
(2)使用StringWriter将DataGrid读出来,在使用Response的另存为功能,将html页存为Xls格式的Excel文件。
代码:
//导出按钮
protected void ibtnExport_Click(object sender, ImageClickEventArgs e)
{
ExportDataGrid("application/ms-excel", "test.xls"); //导到Excel
}
具体实现
#region 使用DataGrid生成Excel
/// <summary>
/// 使用DataGrid生成Excel
/// </summary>
/// <param name="FileType">文件类型MIME类型</param>
/// <param name="FileName">文件名</param>
private void ExportDataGrid(string FileType, string FileName) //从DataGrid导出
{
System.Web.UI.WebControls.DataGrid dg = new System.Web.UI.WebControls.DataGrid();
//这里使用的是IBatis与数据库通信,大家可以使用ADO或者别的方式查询数据
dg.DataSource = Helper.ContactExport().ExportDataIntoExcel();
dg.DataBind();
//定义文档类型、字符编码
Response.Clear();
Response.AppendHeader("Content-Disposition", "attachment;filename=" + HttpUtility.UrlEncode(FileName, Encoding.UTF8).ToString());
Response.Charset = "UTF-8";
Response.ContentEncoding = Encoding.Default;
Response.ContentType = FileType;
dg.EnableViewState = false;
//定义一个输入流
StringWriter tw = new StringWriter();
HtmlTextWriter hw = new HtmlTextWriter(tw);
//目标数据绑定到输入流输出
dg.RenderControl(hw);
//GvContract 绑定datagrid,或其他支持obj.RenderControl()属性的控件
//ScriptManager.RegisterStartupScript(this.Page, this.GetType(), "info", tw.ToString(), false);
Response.Write(tw.ToString());
Response.End();
}
#endregion
注意事项:
(1)由于我的页面中有Ajax的UpdatePanel控件,所以在代码中需要加入如下代码:
public override void VerifyRenderingInServerForm(Control control)
{
//base.VerifyRenderingInServerForm(control);
}
(2)在UpdatePanel的Triggers节点下注册按钮
<Triggers>
<asp:PostBackTrigger ControlID="ibtnExport" />
</Triggers>
下面给出一个在网上下载的一个已经封装好的类
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI.WebControls;
using System.Web.UI;
using System.Data;
using System.Text;
using System.Globalization;
using System.IO;
namespace VMS.Test.Classes
{
public class ExcelHelper {
#region Fields
string _fileName;
DataTable _dataSource;
string[] _titles = null;
string[] _fields = null;
int _maxRecords = 1000;
#endregion
#region Properties
/**//// <summary>
/// 限制输出到Excel 的最大记录数。超出则抛出异常
/// </summary>
public int MaxRecords {
set { _maxRecords = value; }
get { return _maxRecords; }
}
/**//// <summary>
/// 输出到浏览器的Excel 文件名
/// </summary>
public string FileName {
set { _fileName = value;
补充:软件开发 , C# ,