我确实有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。代码正在工作,但它只是第一个版本,因为可能存在以下问题(我认为这些问题可能会发生,因为它是生成很长报告的报告页面):
1) 存储过程可能运行时间过长->可能发生会话超时,而且用户在很长一段时间内都看不到来自系统的任何响应
2) 即使存储过程已经完成,将数据加载到gridview也可能是一个非常长的过程。这可能会导致另一个会话超时。
我需要一个解决方案1) 不显示长服务器poess(存储过程)的会话超时2) 在gridview中显示数据没有超时,3) 显示加载数据时的进度条。
我从未使用过Threads或AsyncCalls,所以我想先做一些调查。
现在我找到了以下链接:http://madskristensen.net/post/Asynchronous-GridView-in-5-simple-steps.aspx我想知道这是否适用于我的案件,以及我不知道的问题。
为了解决您的问题,您可以定义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的Selecting事件中设置超时值:
protected void SqlDataSource1_Selecting(object sender,
SqlDataSourceSelectingEventArgs e)
{
e.Command.CommandTimeout = 200;
}