SQL 데이터베이스를 쿼리하기 위해 Linq에서 Sql으로 C# MVC 웹 응용 프로그램을 빌드합니다. 죽음의 노란색 화면이 나타나지 않도록 데이터베이스를 오프라인으로 전환해야하는 경우 예외를 잡으려고합니다.데이터베이스가 오프라인 일 때 LinqToSql 예외 처리
디버깅 후 두 가지를 발견했습니다. 첫째, DataContext의 생성은 SQL 서버가 사용 가능한지 확인하지 않습니다. 둘째, 행 변수에 저장된 오류 메시지 (또는 예외!)가 있습니다.
아래 코드의 Catch 문에는 절대로 도달하지 않습니다. 따라서 뷰에서 모델의 데이터를 읽으려고 할 때 나는 죽음의 노란색 화면을 얻습니다.
왜 캐치 선언에 도달하지 않았습니까?
코드 : @ofir 당신이 LINQ 문을 실행하기 위해 .ToList()
메소드를 호출해야 언급 한 바와 같이 :
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);
}
실행이 취소 된 상태에서 db에 대한 실제 호출이 뷰에 있습니다. 먼저 그것을 구체화해야합니다. '.ToList()'를 추가하고 뷰에 목록을 보냅니다. –
Thx @OfirWinegarten. 그것은 받아 들여진 대답이어야합니다. – Andreas