使用 Linq 检测数据库连接错误?

发布于 2024-07-24 02:59:22 字数 372 浏览 4 评论 0原文

在使用 Linq 收到应用程序“传输级错误”之前,是否可以检测到连接中的错误?

假设我有一个名为 SQLServer1 的 SQL 服务器,并且我正在运行一个应用程序,该应用程序使用 LinQ 连接到该服务器以获取一些信息。

我决定将服务器名称更改为 SQLServer2。 下次运行我的应用程序时,我将收到如下错误:

从服务器接收结果时发生传输级错误。(提供程序:TCP 提供程序,错误:0 - 指定的网络名称不再可用) .)"

因为 LinQ 不知道发生了变化!

我怎样才能在运行时捕捉到这个? 是否可以扩展 DataContext 类以在获取数据之前以某种方式检查连接?

谢谢!

Is it possible to detect an error in a connection before we get an application "Transport-level error" using Linq?

Lets say that I have a SQL server called SQLServer1, and I am running an application that connects to that server using LinQ to get some information.

I decide to change the server Name to SQLServer2.
The next time my application run I will get an error like this:

"A transport-level error has occurred when receiving results from the server. (provider: TCP Provider, error: 0 - The specified network name is no longer available.)"

Because LinQ doens't know that there was a change!

How can I catch this during runtime?
Is it possible to extend the DataContext class to check somehow the connection before getting the data?

Thanks!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

海拔太高太耀眼 2024-07-31 02:59:22

以下是我扩展课程的方法。 我使用单例模式来调用数据上下文,这会导致每个页面请求都会实例化一个数据上下文对象,而不管单例被调用的次数如何。 在每个请求第一次调用单例时,我运行 DataContext.DatabaseExists(),如果它是 false,我会优雅地处理错误。 现在,每当我的任何代码尝试对数据上下文执行任何操作时,它都会向我的用户提示“抱歉,数据库已关闭”消息。

ASP.NET C# 代码:

namespace dal
{
    public partial class DataModelDataContext
    {
        public static DataModelDataContext DataContext
        {
              get
              {
                  if (System.Web.HttpContext.Current.Items["ModelDataContext"] == null)
                  {
                      DataModelDataContext datacontext = new DataModelDataContext();
                      //Once per page request, of the datacontext is requested, check to see if the database connection is valid.
                      if (!datacontext.DatabaseExists())
                      {
                           System.Web.HttpContext.Current.Response.Redirect("DatabaseIsDown.html");
                      }
                      System.Web.HttpContext.Current.Items["ModelDataContext"] = datacontext;

                  }
                  return (DataModelDataContext)System.Web.HttpContext.Current.Items["ModelDataContext"];
              }
        }
    }
}

Here's how I've extended the class. I use a singleton pattern for calling the data context, which results in one data context object being instantiated per page request regardless of the number of times the singleton is called. On the first call to the singleton per request, I run DataContext.DatabaseExists(), and if it is false, I gracefully handle the error. Now whenever any of my code attempts to do anything with the datacontext, it prompts my users with a "sorry, the database is down" message.

ASP.NET C# code:

namespace dal
{
    public partial class DataModelDataContext
    {
        public static DataModelDataContext DataContext
        {
              get
              {
                  if (System.Web.HttpContext.Current.Items["ModelDataContext"] == null)
                  {
                      DataModelDataContext datacontext = new DataModelDataContext();
                      //Once per page request, of the datacontext is requested, check to see if the database connection is valid.
                      if (!datacontext.DatabaseExists())
                      {
                           System.Web.HttpContext.Current.Response.Redirect("DatabaseIsDown.html");
                      }
                      System.Web.HttpContext.Current.Items["ModelDataContext"] = datacontext;

                  }
                  return (DataModelDataContext)System.Web.HttpContext.Current.Items["ModelDataContext"];
              }
        }
    }
}
情泪▽动烟 2024-07-31 02:59:22
try
{
   // run linq query here
}
catch (Exception e)
{
   // take appropriate action to handle the error like updating the connection string, etc.
}
try
{
   // run linq query here
}
catch (Exception e)
{
   // take appropriate action to handle the error like updating the connection string, etc.
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文