【问题标题】:Catching an exception if there's no connection如果没有连接,则捕获异常
【发布时间】:2013-11-05 12:03:58
【问题描述】:

我在 asp.net/c# 中有一个更新 SQL 服务器的网站,该网站目前运行良好。但是,我正在考虑将其带到移动设备上,并想知道如果设备失去连接该怎么办。基本上,如果用户尝试进行编辑时无法连接,我想抓住它。

基本代码是:

try
{
    Conn.Open();
}
catch (SqlException)
{
    Session["HaveWeUpdated"] = 0;
    Page.ClientScript.RegisterClientScriptBlock(Page.GetType(), "alertMessage", "alert('Error')", true);
}
finally
{
    Conn.Close();
}

如果无法连接,应该会弹出弹出消息,并将我们的 HaveWeUpdated 会话值设置为 0。不幸的是,目前,当我尝试它时(只需将电缆从我的 PC 中拔出) 它进入标准的 IE8“诊断连接问题”页面并且不显示弹出消息 - 因此,我猜它没有被捕获。

【问题讨论】:

  • 如果您无法打开连接,finally 可能会引发异常。使用using 语句来处理/关闭连接。
  • 它实际上是SqlException 吗?如果网络错误表现为SqlException,我会感到惊讶。注意:using 优于 Open/Close。另外:如果这是 ASP.NET,那么您的 C# 代码将在 服务器上运行;浏览器对话框在客户端运行。不同的宇宙(如果这实际上是移动设备代码,请忽略)。
  • 您的问题与“诊断连接问题”有关,请参考下面我的回答..
  • @TimSchmelter Using 语句也有同样的作用。完全没有区别。它会抛出异常。
  • @Sriram Sakthivel,这就是 Tim Schmelter 所说的吗?

标签: c# asp.net sql connection


【解决方案1】:

我认为您对自己网站的运行方式有些困惑。

您在此处编写的代码可在服务器上运行,而不是在移动设备上运行。因此,它检查它是否可以连接到数据库;它不会检查您是否可以从移动设备连接到网站。

简单地说,当您拔出电缆时,您的本地计算机和网络服务器之间的连接就会丢失。

澄清更多:

1- Web 浏览器请求页面

2- Web 服务器接收请求

3- Web 服务器调用数据库服务器

4- Web 服务器接收来自 DB 服务器的响应

5- Web 服务器处理响应

6- Web 服务器向浏览器发送响应

7- 浏览器处理并显示响应。

【讨论】:

  • 我猜@daryal 知道了。如果您的 SQL Server 实例在另一台计算机上,您可以从这台计算机上拔下电缆(重要的是您的网站和数据库的服务器在不同的机器来测试它,否则,你可以通知一个错误的连接字符串),你的网站你将能够为你检索错误/异常。
  • 这是有道理的。我曾希望,当页面加载时,它会保留在内存中,而不必在服务器之间来回切换。在那种情况下,正如@daryal 所说,我想这是不可能的。感谢您的回答!
猜你喜欢
  • 2012-05-20
  • 2020-07-29
  • 1970-01-01
  • 1970-01-01
  • 2020-09-20
  • 2021-06-20
  • 2013-03-24
  • 2013-07-02
  • 1970-01-01
相关资源
最近更新 更多