利用ADO.NET导出数据

2015年12月,XX项目中需要做一个数据导出功能,当时所有页面的到处功能均已经实现,但有个页面数据量太大,导出过程中导出页面直接卡死。不得已我准备选用ADO.NET来重新完成这个功能,因为考虑到越偏向底层操作速度越快这个逻辑,我选用从SqlCommand中直接读取数据,每两万条数据写一次文件,避免一次写入过多页面直接卡死,最后测试可以导出25G的数据,满足系统需求。

using System;
using System.Data;
using System.Data.SqlClient;

public class ADO_NET
{
    public ActionResult ExportData()
    {
        string sAbsolutePath = "xxx";
        string FileName = string.Format("AQ_{0}.csv", DateTime.Now.ToString("yyyyMMddHHmmss"));

        try
        {
            FinCapDbContext db = DbContextFactory.GetCurrentContext();
            SqlConnection conn = new SqlConnection(db.CurrentConnectionString);
            conn.Open();
            SqlCommand cmd = new SqlCommand("SQL Statement", conn);
            cmd.CommandTimeout = 1200;
            SqlDataReader sdr = cmd.ExecuteReader();
            StreamWriter sw = new StreamWriter(sAbsolutePath + "\\" + FileName, false, Encoding.GetEncoding("GB2312"));
            StringBuilder sb = new StringBuilder();
            int k = 0;
            for (int m = 0; m < sdr.FieldCount; m++)
            {
                sb.Append(sdr.GetName(m) + ",");
            }
            sb.Append(Environment.NewLine);

            while (sdr.Read())
            {
                k++;
                for (int n = 0; n < sdr.FieldCount; n++)
                {
                    sb.Append(sdr[n] + ",");
                }
                sb.Append(Environment.NewLine);

                if (k > 20000)
                {
                    k = 0;
                    sw.Write(sb.ToString());
                    sb.Length = 0;
                }
            }

            if (k <= 20000)
            {
                sw.Write(sb.ToString());
            }

            sw.Flush();
            sw.Close();
            conn.Close();
            return File(sAbsolutePath + "\\" + FileName, "application/zip-x-compressed", FileName);
        }
        catch
        {
            return File("xxx");
        }
    }
}

时间: 2024-10-22 09:47:10

利用ADO.NET导出数据的相关文章

BCP是SQL Server中负责导入导出数据的一个命令行工具

BCP是SQL Server中负责导入导出数据的一个命令行工具,它是基于DB-Library的,并且能以并行的方式高效地导入导出大批量的数据.BCP可以将数据库的表或视图直接导出,也能通过SELECT FROM语句对表或视图进行过滤后导出.在导入导出数据时,可以使用默认值或是使用一个格式文件将文件中的数据导入到数据库或将数据库中的数据导出到文件中. 下面将详细讨论如何利用BCP导入导出数据. 1. BCP的主要参数介绍 BCP共有四个动作可以选择. (1) 导入. 这个动作使用in命令完成,后面

Java利用POI导入导出Excel中的数据

     首先谈一下今天发生的一件开心的事,本着一颗android的心我被分配到了PB组,身在曹营心在汉啊!好吧,今天要记录和分享的是Java利用POI导入导出Excel中的数据.下面POI包的下载地址http://poi.apache.org/download.html,有兴趣的朋友也可以去看看其中的API.      下面分享一下在对POI进行基本操作时觉得需要注意的两点:       1.POI中针对xlsx/xls是需要create different Workbook instance

php利用phpexcel导出数据

php中利用phpexcel导出数据的实现代码.对phpexcel类库不熟悉的朋友,可以阅读下<phpexcel中文帮助手册>中的内容,具体实例大家可以phpexcel快速开发指南中的相关例子. 完整代码: public function export_data($data = array()) { # code... include_once(APP_PATH.'Tools/PHPExcel/Classes/PHPExcel/Writer/IWriter.php') ; include_on

利用NPOI导出数据到Execl

相信很多童鞋都开发过Execl的导入导出功能,最近产品中无论是后台数据分析的需要,还是前端满足用户管理的方便,都有Execl导入导出的维护需求产生. 以前做这个功能,如果是web,利用HttpContext.Current.Response.ContentType ="application/ms-excel";就可以导出html数据表格到execl中,这种方法的问题就是编码格式的兼容性太差,用Mac OS之类的 office打开直接乱码给你看.或者是调用office的COM组件,或宏

利用aspose.cell把数据导出到excel

/// <summary> /// 导出数据到本地 /// </summary> /// <param name="dt">要导出的数据</param> /// <param name="tableName">表格标题</param> /// <param name="path">保存路径</param> public void OutFileToDi

使用ADO实现BLOB数据的存取 -- ADO开发实践之二

使用ADO实现BLOB数据的存取 -- ADO开发实践之二 http://www.360doc.com/content/11/0113/16/4780948_86256633.shtml 一.前言 在上一篇文章<>中我们详细介绍了ADO基本的操作方法,在实际的开发过程中我们常常需要存储较大的二进制数据对象,比如:图像.音频文件.或其它二进制数据,这些数据我们称之为二进制大对象BLOB(Binary Large Object),其存取的方式与普通数据有所区别.本文将介绍利用ADO在数据库中存取B

Delphi 导出数据至Excel的7种方法【转】

转自:http://blog.csdn.net/zang141588761/article/details/52275948 一; delphi 快速导出excel uses ComObj,clipbrd; function ToExcel(sfilename:string; ADOQuery:TADOQuery):boolean; const xlNormal=-4143; var y : integer; tsList : TStringList; s,filename :string; a

ADO.NET 导出 Excel 文件

在使用 ADO.NET 导出 Excel 文件时,设置 IMEX=1 仍不能导出所有数据的解决办法 今天遇到一个问题,在使用 ADO.NET 导出 Excel 文件时,连接字符串里面已经设置了 IMEX=1,仍有部分数据不能导出,经过研究,需要在注册表中进行设置 TypeGuessRows 的配置,默认情况下,驱动程序会扫描前 8 行数据,来对数据类型进行采样.设置为 0 ,将对列的所有行进行扫描,如果前八行采样数据都是数值类型的话,设置 IMEX = 1 也不会将剩下的行的默认数据类型转换为文

mysql select 导出数据 加分隔符

mysql select 导出数据 加分隔符,方便生成Excel和利用python进行数据处理. mysql> select ID,VERSION,HEADLINE from news limit 10 INTO OUTFILE "/tmp/1.txt" fields terminated by '|'; 导入数据 load data local infile  'test.csv'  into table test_field fields  terminated by ','