日期:2014-05-20  浏览次数:20676 次

大数据量的问题
最近公司有个需求,就是把一些数据倒出来,但这个数据非常大,大约有3W多笔,要求是这样的,就是把这些资料在前台显示,同时要转为EXCEL.我用了个存储过程,但由于资料太多,前台还是无法显示.其实显示前十笔给他看就行了,关键是要倒出为EXCEL,所以所有的资料必须全部从数据库里取出来.各位有什么好办法

------解决方案--------------------
如果对效率,调度要求比较高可以使用sqlserver的dts,以windows service的方式运行,与前台交互可以使用remoting注册tcp/ip通道(同局域网内部署),关于.net的dts开发,可以参考
http://www.programfan.com/article/showarticle.asp?id=2712
------解决方案--------------------
楼主可以先将数据用DATAGRIDVIEW在前台显示,然后再将DATAGRIDVIEW(或DATASET)的数据导入到EXCEL里,请参考下面的代码,这代码也不是我写的,楼主主要看如何用myData数组来获取与填充就行了


/**//// <summary>
/// DataGridView导出到Excel
/// 操作步骤:
/// 1)先添加对Excel的引用。选择项目-〉添加引用-〉COM-〉添加Microsoft Excel 9.0
/// (不同的office讲会有不同版本的dll文件).
/// 2)引入using Microsoft.Office.Interop.Excel;和using System.Reflection;
///
/// </summary>
/// <param name= "dgv "> </param>
public void DBtoExcel(DataGridView dgv)
{
int rowCount = dgv.RowCount;
int columnCount = dgv.ColumnCount;
//
Microsoft.Office.Interop.Excel.Application exc = new Microsoft.Office.Interop.Excel.Application();
if (exc == null)
{
throw new Exception( "Excel无法启动 ");
}
//
exc.Visible = true;
//
Workbooks workbooks = exc.Workbooks;
//
_Workbook workbook = workbooks.Add(XlWBATemplate.xlWBATWorksheet);
//
Sheets sheets = exc.Sheets;
_Worksheet worksheet = (_Worksheet)sheets[1];
if (worksheet == null)
{
throw new Exception( "Worksheet error ");
}
//
Range r = worksheet.get_Range( "A1 ", Missing.Value);
if (r == null)
{
MessageBox.Show( "Range无法启动 ");
throw new Exception( "Range error ");
}


//以上是一些例行的初始化工作,下面进行具体的信息填充
//填充标题
int ColIndex = 1;
foreach (DataGridViewColumn dHeader in dgv.Columns)
{
worksheet.Cells[1, ColIndex++] = dHeader.HeaderText;
}
//获取DataGridView中的所有行和列的数值,填充到一个二维数组中.
object[,] myData = new object[rowCount + 1, columnCount];
for (int i = 0; i < rowCount; i++)
{
for (int j = 0; j < columnCount; j++)
{
myData[i, j] = dgv[j,i].Value; //这里的获取注意行列次序
}
}
//将填充好的二维数组填充到Excel对象中.
r = worksheet.get_Range(worksheet.Cells[2, 1], worksheet.Cells[rowCount + 1, columnCount]);
r.Value2 = myData;
}

/**//// <summary>
/// 导出GridView到Excel中的关键之处
/// 用法: ToExcel(GVStaff, TextBox1.Text);
/// </summary>
/// <param name= "ctl "> </param>
/// <param name= "FileName "> </param>
public static void ToExcel(System.Web.UI.Control ctl, string FileName)
{
HttpContext.Current.Response.Charset = "UTF-8 ";
HttpContext.Current.Response.ContentEncoding = System.Text.Encoding.Default;
HttpContext.Current.Response.ContentType = "application/ms-excel ";