求助:大量数据的导出,提示“超过了最大请求长度”----另求教如何优化SQL

poppinH 2010-11-05 09:25:13
小弟有一个系统导出的功能。。其实很简单。
一个Repeater控件。然后绑定datasource的。。但是从数据库里导出来的数据越来越多。从开始的几百条到现在的1万多条。越来越慢。。。。。现在干脆都死了。。。

拜托各位大牛们给支招啊。。!~

绑定的时候就是慢,还不会显示系统错误,但是一点“导出”按钮的时候,显示错误了。

绑定语句:
            this.gvData.DataSource = dt.DefaultView;
this.gvData.DataBind();


导出语句:

 string FileType = "application/ms-excel";
string FileName = SystemComm.getNowDateTime()+".xls";
HttpContext.Current.Response.Charset = "GB2312";
HttpContext.Current.Response.ContentEncoding = System.Text.Encoding.UTF8;
HttpContext.Current.Response.AppendHeader("Content-Disposition", "attachment;filename=" + HttpUtility.UrlEncode(FileName, System.Text.Encoding.UTF8).ToString());
HttpContext.Current.Response.ContentType = FileType;
StringWriter tw = new StringWriter();
HtmlTextWriter hw = new HtmlTextWriter(tw);
gv.RenderControl(hw);
HttpContext.Current.Response.Write(tw.ToString());
HttpContext.Current.Response.End();
...全文
1133 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
poppinH 2010-11-05
  • 打赏
  • 举报
回复
[Quote=引用 19 楼 object_delusion 的回复:]
不用加。这个是把控件显示和导出数据分开了。
如果要筛选什么的直接改数据源就行了。
[/Quote]

还是不太明白这个。。。

你的意思是:导出的是数据源。。而并非是用户看到的repeater上的数据?
poppinH 2010-11-05
  • 打赏
  • 举报
回复
谢谢各位。。导出的问题解决了。!~
柳泉青云 2010-11-05
  • 打赏
  • 举报
回复
不用加。这个是把控件显示和导出数据分开了。
如果要筛选什么的直接改数据源就行了。
poppinH 2010-11-05
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 object_delusion 的回复:]
导出函数
private void Export(GridView gvFieldData, string FileName)
{
//gvFieldData.Columns[7].Visible = false; //导出时隐藏操作列
//gvFieldData.BottomPagerRow.Visible = false; //隐藏分页行
//string s……
[/Quote]

//gvFieldData.BottomPagerRow.Visible = false; //隐藏分页行 主要就是这句吧? 我repeater里加了一行这个。就能隐藏的repeater分页了?
poppinH 2010-11-05
  • 打赏
  • 举报
回复
学习中。。。谢谢。。!~
  • 打赏
  • 举报
回复
加分页没什么. 导出的时候取消分页
dhdhzzw 2010-11-05
  • 打赏
  • 举报
回复
学习了
柳泉青云 2010-11-05
  • 打赏
  • 举报
回复
导出函数
private void Export(GridView gvFieldData, string FileName)
{
//gvFieldData.Columns[7].Visible = false; //导出时隐藏操作列
//gvFieldData.BottomPagerRow.Visible = false; //隐藏分页行
//string style = @"<style> .text { mso-number-format:\@; } </script> ";
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 = "application/ms-excel";//设置输出文件类型为excel文件。
//此句可解决中文导出后成为韩文的问题Response.Write("<meta http-equiv=Content-Type content=\"text/html; charset=GB2312\">");
System.IO.StringWriter oStringWriter = new System.IO.StringWriter();
System.Web.UI.HtmlTextWriter oHtmlTextWriter = new System.Web.UI.HtmlTextWriter(oStringWriter);
gvFieldData.RenderControl(oHtmlTextWriter);
//Response.Write(style);
Response.Output.Write(oStringWriter.ToString());
Response.Flush();
Response.End();

}

//这个方法是配合导出Excel功能,内容不用写
public override void VerifyRenderingInServerForm(Control control)
{
}
poppinH 2010-11-05
  • 打赏
  • 举报
回复
。。。谢谢。。我去try try。。!
柳泉青云 2010-11-05
  • 打赏
  • 举报
回复
DataSet ds = DataBLL.GetDateList();//要到处的数据
string FileName = SystemComm.getNowDateTime()+".xls";

GridView gv = new GridView();
if (ds.Tables[0].Rows.Count > 0)
{
gv.RowDataBound += new GridViewRowEventHandler(this.gv_RowDataBound);
gv.DataSource = ds.Tables[0].DefaultView;
gv.DataBind();
this.Export(gv, FileName);
checkshow.Show(this, "导出成功!");
}
else
{
checkshow.Show(this, "无数据!");
}
//设置头信息
protected void gv_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.Header)
{
e.Row.Cells[0].Text = "标题1";
e.Row.Cells[1].Text = "标题2";
e.Row.Cells[2].Text = "标题3";
e.Row.Cells[3].Text = "标题4";
e.Row.Cells[4].Text="标题5";
e.Row.Cells[5].Text = "标题6";
e.Row.Cells[6].Text = "标题7";
e.Row.Cells[7].Text = "标题8";
}
}
柳泉青云 2010-11-05
  • 打赏
  • 举报
回复
web.config中:
<system.web>
<httpRuntime maxRequestLength="102400" executionTimeout="720"/>
<!--设置HTTP请求超时时间720秒-->
</system.web>
wubudang 2010-11-05
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 poppinh 的回复:]
采用分页会对导出有影响么?

小弟新手。。。害怕用分页以后,导出来的数据部完整。。。
[/Quote]
分页不会对导出有什么影响的。主要还是看导出的函数,我这边导出1W多条都是可以的。
poppinH 2010-11-05
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 zeewendotnet 的回复:]
我的一个系统也有差不多的情况,现在也在做优化工作。但与楼主有点不同,我即使很慢,也只是查询超时报错,不会说在导出的时候报错。如果是楼主的情况,具体的报错信息是什么呢?你确定按导出时报的错是sqlserver性能方面的错误?还是导出的c#语句有问题?
我现在的优化工作一方面是从业务入手,减少或者改变一些查询数据的逻辑,比如说那些数据不用导出的,那些是可以从其他容易查询的数据来代替的。另一方面就是优……
[/Quote]

我也考虑过分批导。。但是终端用户不考虑。。。他们就是要方便啊。。他们需要的就是全部的数据。然后设置条件---点查询---点导出。如果要分批量的导,他们得一次又一次的导。。所以,用户肯定不干的。
wyman25 2010-11-05
  • 打赏
  • 举报
回复
我还是估计楼主的查询有很大优化空间。1W条其实不算什么(反而导出来后,打开这个xls文件就痛苦了)。
作一些索引的优化吧。同时还要改一下sql查询语句,不然有索引用不上也是白费
poppinH 2010-11-05
  • 打赏
  • 举报
回复
在 <appSettings> 里么?
poppinH 2010-11-05
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 bclz_vs 的回复:]
在web.config中设置下你的MaxRequestLength
[/Quote]

能教我在什么地方设置么?
速 战 2010-11-05
  • 打赏
  • 举报
回复
web.config中设置下你的MaxRequestLength
并且数据量大的话 实行查询条件查询特定数据在导出.EXCEL 还有行数和列数限制呢
poppinH 2010-11-05
  • 打赏
  • 举报
回复
采用分页会对导出有影响么?

小弟新手。。。害怕用分页以后,导出来的数据部完整。。。
wyman25 2010-11-05
  • 打赏
  • 举报
回复
我的一个系统也有差不多的情况,现在也在做优化工作。但与楼主有点不同,我即使很慢,也只是查询超时报错,不会说在导出的时候报错。如果是楼主的情况,具体的报错信息是什么呢?你确定按导出时报的错是sqlserver性能方面的错误?还是导出的c#语句有问题?
我现在的优化工作一方面是从业务入手,减少或者改变一些查询数据的逻辑,比如说那些数据不用导出的,那些是可以从其他容易查询的数据来代替的。另一方面就是优化sql查询,用到的profile和查询计划这些功能的确比较好分析。
后主现在说一下导出1W条,是不是可以分批导出呢?你如说逐次导出2K条这样。另一方面也去监测一下你的查询效率,能不能建立索引,或者优化一下SQL语句。
优化工作是个漫长的过程,要慢慢来了。
边城的刀声 2010-11-05
  • 打赏
  • 举报
回复
Repeater绑定1万多条数据为什么不采用分页呢?
加载更多回复(1)

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

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