c#LinqToSql数据库脱机时的异常处理

时间:2017-11-18 18:22:23

标签: c# model-view-controller linq-to-sql exception-handling

使用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);
        }

2 个答案:

答案 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