0

SQLデータベースを照会するためのLinqからSQLへのC#MVC Webアプリケーションの構築。 死の黄色い画面が表示されないように、データベースをオフラインにする必要がある場合は、例外をキャッチしようとしています。データベースがオフラインのときのLinqToSql例外処理

デバッグ後、私は2つのことを見つけました。まず、DataContextを作成しても、SQL Serverが使用可能かどうかはチェックされません。次に、行変数に格納されているエラーメッセージ(または例外!?)があります。

以下のコードのCatch文には決して達しません。だから、ViewのModelからデータを読み込もうとすると、黄色の死の画面が表示されます。

なぜキャッチステートメントに達していませんか?

コード:

 try 
     { 
      //Creating DB Context 
      var con = ConfigurationManager.ConnectionStrings["teststring"].ConnectionString; 
      TestDataContext db = new TestDataContext(con); 

      //Querying database. This should cause an exception to be thrown!? 
      var rows = from s in db.Table 
         orderby s.Id descending 
         select s; 

      //Returning the View with the data 
      return View(rows); 
     } 
     catch (Exception ex) 
     { 
      ErrorInfo err = new ErrorInfo("Something went wrong when trying to query the database. See the log for details."); 
      err.WriteToErrorLog(ex); 
      return View("Error", err); 
     } 
+2

実行が終了したため、dbへの実際の呼び出しはビューにあります。まずそれを具体化する必要があります。 '.ToList()'を追加し、ビューにリストを送ります。 –

+0

Thx @OfirWinegarten。それは受け入れられた答えでなければなりません。 – Andreas

答えて

0

は、あなたがするSQLException

まず
try 
    { 
     //Creating DB Context 
     var con = ConfigurationManager.ConnectionStrings["teststring"].ConnectionString; 
     TestDataContext db = new TestDataContext(con); 

     //Querying database. This should cause an exception to be thrown!? 
     var rows = from s in db.Table 
        orderby s.Id descending 
        select s; 

     //Returning the View with the data 
     return View(rows); 
    } 
    catch (SqlException ex) 
    { 
     ErrorInfo err = new ErrorInfo("Something went wrong when trying to query the database. See the log for details."); 
     err.WriteToErrorLog(ex); 
     return View("Error", err); 
    } 
0

を使用しようとしました:@ofirあなたはLINQ文を実行するために.ToList()メソッドを呼び出す必要が述べたように。例外をキャッチするにはtryブロックで呼び出す必要があります。

第二: あなたは、例外がスローされたときにデフォルトページを表示するweb.configファイルにCustomErrorを有効にしてエラーページ

にリダイレクトすることができ、セキュリティ上の理由のエンドユーザに黄色のエラー画面が表示されないはずです
<customErrors mode="On" defaultRedirect="~/ErrorPages/GeneralError">  
</customErrors>