在使用Linq获取应用程序“传输级别错误”之前,是否可以检测到连接中的错误?
假设我有一个名为SQLServer1的SQL服务器,我正在运行一个使用LinQ连接到该服务器的应用程序来获取一些信息。
我决定将服务器名称更改为SQLServer2。 下次运行我的应用程序时,我会收到如下错误:
“从服务器接收结果时发生传输级别错误。(提供程序:TCP提供程序,错误:0 - 指定的网络名称不再可用。)”
因为LinQ不知道有变化!
如何在运行时捕获此信息? 是否可以扩展DataContext类以在获取数据之前以某种方式检查连接?
谢谢!
答案 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.
}