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

时间:2009-06-05 21:45:08

标签: linq connection datacontext connection-pooling

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

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

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

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

因为LinQ不知道有变化!

如何在运行时捕获此信息? 是否可以扩展DataContext类以在获取数据之前以某种方式检查连接?

谢谢!

2 个答案:

答案 0 :(得分:2)

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

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"];
              }
        }
    }
}

答案 1 :(得分:0)

try
{
   // run linq query here
}
catch (Exception e)
{
   // take appropriate action to handle the error like updating the connection string, etc.
}