大数据量的问题

TTLOVEYOU3344 2007-01-26 09:29:57
最近公司有个需求,就是把一些数据倒出来,但这个数据非常大,大约有3W多笔,要求是这样的,就是把这些资料在前台显示,同时要转为EXCEL.我用了个存储过程,但由于资料太多,前台还是无法显示.其实显示前十笔给他看就行了,关键是要倒出为EXCEL,所以所有的资料必须全部从数据库里取出来.各位有什么好办法
...全文
511 25 打赏 收藏 转发到动态 举报
写回复
用AI写文章
25 条回复
切换为时间正序
请发表友善的回复…
发表回复
jcyluck 2007-01-26
  • 打赏
  • 举报
回复
效率不差,曾导过5万条的记录,也就10秒左右的样子
jcyluck 2007-01-26
  • 打赏
  • 举报
回复
楼主可以先将数据用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";
HttpContext.Current.Response.AppendHeader("Content-Disposition", "attachment;filename=" + "" + FileName + ".xls");
ctl.Page.EnableViewState = false;
System.IO.StringWriter tw = new System.IO.StringWriter();
HtmlTextWriter hw = new HtmlTextWriter(tw);
ctl.RenderControl(hw);
HttpContext.Current.Response.Write(tw.ToString());
HttpContext.Current.Response.End();
}
//必须有下面这句!否则不会通过!
public override void VerifyRenderingInServerForm(Control control)
{
// Confirms that an HtmlForm control is rendered for
}
w5i2e1 2007-01-26
  • 打赏
  • 举报
回复
你的3W是什么意思?是3万多条数据是吗?先把数据查询出来插入到临时表中,然后从临时表中做查询,肯定比你直接查库要快至少5倍以上!!!
human_2 2007-01-26
  • 打赏
  • 举报
回复
3W没关系啊,直接在EXCEL里面加入数据都可以
yan63 2007-01-26
  • 打赏
  • 举报
回复
但数据库不在局域网内
----------------------------
是否有防火墙?如果有的话就比较复杂了,如果通过internet可以直接访问到,那么dts的使用和本地sqlserver也应该没有区别
小小暴徒 2007-01-26
  • 打赏
  • 举报
回复
帮你顶,让高手来捧场
TTLOVEYOU3344 2007-01-26
  • 打赏
  • 举报
回复
其实我不显示也可以,我只是要把这些数据倒成EXCEL就可以了,但数据库不在局域网内
j_lei407 2007-01-26
  • 打赏
  • 举报
回复
mark
viena 2007-01-26
  • 打赏
  • 举报
回复
前台分页显示吧
losteveb 2007-01-26
  • 打赏
  • 举报
回复
帮你顶上去!!
yan63 2007-01-26
  • 打赏
  • 举报
回复
如果对效率,调度要求比较高可以使用sqlserver的dts,以windows service的方式运行,与前台交互可以使用remoting注册tcp/ip通道(同局域网内部署),关于.net的dts开发,可以参考
http://www.programfan.com/article/showarticle.asp?id=2712
yanro 2007-01-26
  • 打赏
  • 举报
回复
3w .
我以前都导过80万的数据.
时间用了好象是十几分钟吧.
如果想要代码:QQ:84115357
jydqwe 2007-01-26
  • 打赏
  • 举报
回复
来学习下 顺便帮LZ顶了
TTLOVEYOU3344 2007-01-26
  • 打赏
  • 举报
回复
太感谢liujia_0421了!!!!!
liujia_0421 2007-01-26
  • 打赏
  • 举报
回复
or try...

http://www.cnblogs.com/forrest_lu/archive/2004/04/21/6966.aspx

方法挺简单,不知道效率如何...
liujia_0421 2007-01-26
  • 打赏
  • 举报
回复
这里有篇文章说的是从数据库导入excel,8000条只需要4秒钟...

不知道对你有没有帮助...

http://sh.szstudy.cn/showArticle/26700.shtml
lovvver 2007-01-26
  • 打赏
  • 举报
回复
3W条数据,如果前台查看,使用分页显示(一次只取几页的数据即可)。
如果要导出,有几种选择:
1。在服务器上导出到excel,然后把excel下载到客户端来
2。将数据放到DataSet里返回到客户端,然后手动来写excel

个人觉得,1。是个不错的选择。
liujia_0421 2007-01-26
  • 打赏
  • 举报
回复
顺便问一下,你用的是什么数据库?
liujia_0421 2007-01-26
  • 打赏
  • 举报
回复
对于导数据,你看看应该有专门的工具...

以前做过Oracle将文本文件导入数据库,用的是Oracle的sqlloader,当时是写成的一个批处理,然后在程序中调就行了,速度特别快...速度大约相当于在程序中解析字符串,然后插入数据库这种做法的25倍左右(做过实验)...

对于从数据库中往外面导,我想也应该有相应的工具吧...如果真有的话,不妨也写成批处理,然后在程序中调用即可...

仅供参考..
GXY2005 2007-01-26
  • 打赏
  • 举报
回复
我这3W条是通过三个大数据量的表查询出来的数据
----------------------------
那你先把查询结果放另一个表然后直接倒出Excel
加载更多回复(4)

110,536

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧