【发布时间】:2021-12-03 04:58:00
【问题描述】:
我的要求是当SQL查询超时并且出现超时异常时显示超时消息。我在 UI 中添加了一个标签,并在出现超时异常时在代码中将 Visibility 设置为 true。在调试时,它到达了我设置 lblTimeout.Visible = True 的那一行,但仍然没有显示消息,因为标签仍然隐藏。
<div id="dvGrid">
<asp:ScriptManager ID="ScriptManager2" runat="server">
</asp:ScriptManager>
<asp:UpdatePanel ID="panel" runat="server" UpdateMode="Conditional">
<ContentTemplate>
<asp:Label runat="server" ID="lblTimeout" Visible="false" Text="Your query timed out"></asp:Label>
<asp:DataGrid ID="dataGrid" AutoGenerateColumns="false">
<Columns>
<asp:TemplateColumn>
<ItemTemplate>
<input type="Checkbox" name="chkBox" value="Blah" runat="server" />
</ItemTemplate>
</asp:TemplateColumn>
</Columns>
</asp:DataGrid>
<asp:Button ID="Button1" runat="server" Style="display: none" />
</ContentTemplate>
</asp:UpdatePanel>
</div>
VB.Net 代码:
Public Overrides Function ReadData() As DataSet
Dim con As New SqlConnection()
Dim dataSet As New DataSet()
Dim query As String
Try
query = "Select * from Employees"
query = "WAITFOR DELAY '00:05:00' " + query 'Added for testing
Dim cmd As New SqlDataAdapter(query, con)
cmd.SelectCommand.CommandTimeout = 30
cmd.Fill(dataSet)
'Some Code
Return (dataSet)
Catch ex As SqlException
Logger.Error(ex)
If ex.Number = -2 Then
lblTimeout.Visible = True
End If
Catch ex As Exception
Logger.Error(ex)
Finally
If con IsNot Nothing Then
con.Close()
End If
End Try
Return Nothing
End Function
我经历了一些其他类似的问题,并参考了那些我将标签放在 UpdatePanel 中的问题,并尝试设置 UpdateMode="Always" 但它没有帮助。
【问题讨论】:
-
ReadData() 何时调用?
-
它被称为我提到评论'Some Code'的地方。谢谢。
-
嗯,它应该可以工作,但请记住,当您点击按钮时,页面会到达服务器,然后可能需要 5 秒,或者 20 或 50 秒,然后网页仍然卡在服务器上。如果超时,那么你的代码就完成了,一个页面返回到客户端,并显示出来。因此,只要您意识到在一切都完成并超时之前不会出现超时消息,您就可以了。但是在代码实际超时之前,您不会看到标签。另外,请记住,控件 set = visible 不会在客户端呈现。
-
谢谢,我需要更改 UpdateMode="Always" 还是 UpdateMode="Conditional" 可以吗?
标签: c# asp.net .net vb.net exception