使用Linq to Sql构建一个C#MVC Web应用程序,用于查询SQL数据库。 如果数据库应该脱机以避免黄色死亡屏幕,我试图捕获异常。
经过调试,我发现了两件事。首先,DataContext的创建不会检查sql server是否可用。其次,存储在rows变量中的错误消息(或异常!?)。
永远不会达到以下代码中的Catch语句。因此,当我尝试从视图中的模型中读取数据时,我会看到黄色的死亡屏幕。
为什么没有达到Catch声明?
代码:
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);
}
答案 0 :(得分: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);
}
答案 1 :(得分:0)
首先:正如@ofir所提到的,你应该调用web.config
方法来执行LINQ语句。所以你应该在try块上调用它来捕获异常。
其次:
由于安全原因,您不应向最终用户显示黄色错误屏幕,您可以在<customErrors mode="On" defaultRedirect="~/ErrorPages/GeneralError">
</customErrors>
文件中启用CustomError以在抛出异常时显示默认页面并将其重定向到错误页面
namespace.namespace.namespace.namespace.class