1

Linq を使用してアプリケーションの「トランスポート レベル エラー」が発生する前に、接続のエラーを検出することは可能ですか?

SQLServer1 という SQL サーバーがあり、LinQ を使用してそのサーバーに接続して情報を取得するアプリケーションを実行しているとします。

サーバー名を SQLServer2 に変更することにしました。次にアプリケーションを実行すると、次のようなエラーが表示されます。

"サーバーから結果を受信中にトランスポート レベルのエラーが発生しました。 (プロバイダー: TCP プロバイダー、エラー: 0 - 指定されたネットワーク名は利用できません。) "

LinQ は変更があったことを知らないからです!

実行時にこれをキャッチするにはどうすればよいですか? DataContext クラスを拡張して、データを取得する前に何らかの方法で接続を確認することは可能ですか?

ありがとう!

4

2 に答える 2

2

これが私がクラスを拡張した方法です。データ コンテキストの呼び出しにシングルトン パターンを使用します。これにより、シングルトンが呼び出される回数に関係なく、ページ リクエストごとに 1 つのデータ コンテキスト オブジェクトがインスタンス化されます。リクエストごとのシングルトンへの最初の呼び出しで、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"];
              }
        }
    }
}
于 2010-02-26T17:49:49.623 に答える
0
try
{
   // run linq query here
}
catch (Exception e)
{
   // take appropriate action to handle the error like updating the connection string, etc.
}
于 2009-06-05T21:49:29.173 に答える