我有ASP.NET页面,它通过Page_Load和Binds GridView上的SqlDataSource调用存储过程。在PageLoad上,我正在做这样的事情:
string connectionString = BLTutela.BLclsDatabaseConfigurations.GetDefaultConnectionString();
dataSource.ConnectionString = connectionString;
dataSource.SelectParameters["ReportFromDate"].DefaultValue = reportFromDateValue.Date.ToString();
...
GridView1.DataSource = dataSource;
GridView1.DataBind();
dataSource是SqlDataSource并调用StoredProcedure。 代码正在运行,但它只是第一个版本,因为可能存在以下问题(我认为这些问题可能会发生,因为它是生成很长报告的Report页面):
1)存储过程可能会运行太长时间 - > SessionTimeout可能会发生,并且用户也很长时间没有看到系统的任何响应
2)即使存储过程已经完成,将数据加载到gridview也可能是一个非常漫长的过程。这可能会导致另一个会话超时。
我需要一种溶剂 1)不显示长服务器进程的会话超时(存储过程) 2)在gridview中显示数据没有超时, 3)显示数据加载时的进度条。
我从未使用过Threads或AsyncCalls,所以我想先做一些调查。
目前我找到了以下链接: http://madskristensen.net/post/Asynchronous-GridView-in-5-simple-steps.aspx 我想知道这是否适合我的情况以及我不知道的问题。
答案 0 :(得分:4)
要解决您的问题,您可以定义Timeout on your string connection
调整Connect Timeout
属性
<connectionStrings>
<add name="ConnectionString" connectionString="Data Source=;Initial Catalog=;Persist Security Info=True;User ID=;Password=;Connect Timeout=200" providerName="System.Data.SqlClient"/>
</connectionStrings>
您可以在SqlDataSource的选择事件中设置超时值:
protected void SqlDataSource1_Selecting(object sender,
SqlDataSourceSelectingEventArgs e)
{
e.Command.CommandTimeout = 200;
}