1

我确实有 ASP.NET 页面,它通过 Page_Load 上的 SqlDataSource 调用存储过程并绑定 GridView。在 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) 存储过程可能运行时间过长 -> 可能会发生 SessionTimeout 并且用户在很长一段时间内都看不到系统的任何响应

2)即使存储过程已经完成,将数据加载到gridview中也可能是一个很长的过程。这可能会导致另一个会话超时。

我需要一个解决方案,1)不显示长服务器进程(存储过程)的会话超时 2)在 gridview 中显示数据不超时,3)在加载数据时显示进度条。

我从未使用过 Threads 或 AsyncCalls,所以我想先做一些调查。

现在我找到了以下链接: http: //madskristensen.net/post/Asynchronous-GridView-in-5-simple-steps.aspx 我想知道这是否适用于我的情况以及我不知道的问题.

4

1 回答 1

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 的 Selecting 事件中设置超时值:

protected void SqlDataSource1_Selecting(object sender,
SqlDataSourceSelectingEventArgs e)
{
   e.Command.CommandTimeout = 200;
}
于 2012-09-27T18:09:04.633 回答