我有一个设置了DataSourceID的gridview,因此数据绑定会自动发生。问题是,有时,SqlDataSource中定义的过程需要很长时间才能完成,因此绑定会带来超时过期错误。
如何在不手动数据绑定gridview并使用try / catch语句包围它的情况下如何捕获此错误?
答案 0 :(得分:4)
如果在执行SqlDataSource时发生异常,则会触发其相应的动作后事件 - 在这种情况下为Selected。您可以选择为此事件创建事件处理程序,并在事件处理程序中说明您已处理异常。
此图显示了此交互如何与ObjectDataSource一起工作(该概念与SqlDataSource控件相同)。在检查下图时,将“ObjectDataSource”替换为“SqlDataSource”,将“Underlying Object”替换为“Database”,以使其与SqlDataSource相关。
如您所见,在将数据发送到数据库之前引发了Selecting事件,并且在数据返回后引发了Selected事件(或者如果有异常)。
您可以在页面中创建一个Selected事件处理程序,并检查是否发生了异常,并决定是否要自己处理它。 Fredrik Normen有一个很好的博客文章:Handle the data-source control exception by your own.
其他阅读材料:Accessing and Updating Data in ASP.NET: Examining the Data Source Control's Events。
快乐编程!
答案 1 :(得分:0)
为什么不修复查询超时的问题呢?优化DB(首选)或将连接/命令超时设置为高于当前值。
您可以通过挂钩SqlDataSource Selecting event:
按如下方式调整超时protected void ds_Selecting(object sender, SqlDataSourceSelectingEventArgs e)
{
e.Command.CommandTimeout = 5000;
}
如果您使用的是SQL Server,您可能需要查看索引调整向导/ tuning advisor,show query execution plan或SQL Server Profiler等工具。
答案 2 :(得分:0)
如何异步绑定?一旦完成,如果没有返回错误,回调函数可以调用数据绑定。
编辑:我猜这是手册......不是你想要的。
答案 3 :(得分:0)
您唯一能想到的就是处理Page_Error事件