Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何优雅地处理ASP.NET MVC 4中的数据库连接?_C#_Asp.net Mvc_Database_Error Handling - Fatal编程技术网

C# 如何优雅地处理ASP.NET MVC 4中的数据库连接?

C# 如何优雅地处理ASP.NET MVC 4中的数据库连接?,c#,asp.net-mvc,database,error-handling,C#,Asp.net Mvc,Database,Error Handling,在尝试连接到可能已关闭的数据库时,或者在MVC4中给定了错误的连接字符串时,如何优雅地处理错误 我的字符串位于Web.config中,它访问数据库的方式只是在每个控制器中实例化从DBContext派生的类,如下所示: private DBEntities db=新的DBEntities(“数据库”) 如果数据库已启动且一切正常,则此操作正常,但如果数据库未启动,则我的网站上的页面会显示此错误: 异常详细信息:System.ComponentModel.Win32异常:未找到网络路径 显然,我不希

在尝试连接到可能已关闭的数据库时,或者在MVC4中给定了错误的连接字符串时,如何优雅地处理错误

我的字符串位于Web.config中,它访问数据库的方式只是在每个控制器中实例化从DBContext派生的类,如下所示:

private DBEntities db=新的DBEntities(“数据库”)

如果数据库已启动且一切正常,则此操作正常,但如果数据库未启动,则我的网站上的页面会显示此错误:

异常详细信息:System.ComponentModel.Win32异常:未找到网络路径

显然,我不希望出现这种情况,我想做的是找到一种方法来
尝试捕获错误并显示自定义错误页面(类似于404未找到页面)


谢谢。

这取决于私有数据库实体db=新数据库实体(“数据库”)是,何时调用,但为什么不:

try {
  private DBEntities db = new DBEntities("database");
} catch (Exception ex) {
  //do something here
}

它取决于哪里
private DBEntities db=new DBEntities(“数据库”)是,何时调用,但为什么不:

try {
  private DBEntities db = new DBEntities("database");
} catch (Exception ex) {
  //do something here
}

在函数中进行初始化

private DBEntities db;

// then in your function attempt to initialise
try{

db = new DBEntities("database");

db.Connection.Open();

}
catch(Exception ex){

if(db.Connection != ConnectionState.Closed){

db.Connection.Close();
db.Dispose();

//go to error page
}

}

在函数中进行初始化

private DBEntities db;

// then in your function attempt to initialise
try{

db = new DBEntities("database");

db.Connection.Open();

}
catch(Exception ex){

if(db.Connection != ConnectionState.Closed){

db.Connection.Close();
db.Dispose();

//go to error page
}

}

首先在共享视图文件夹中添加一个“Error.cshtml”视图。给它一个模型类型
System.Web.Mvc.HandleErrorInfo

然后将以下内容添加到web.config文件中

<system.web>
  <customErrors mode="On" defaultRedirect="/Error" />
</system.web>

这将重定向到任何异常的错误视图

现在只需设置错误页面的样式

我建议您尝试{}catch{},正如在其他帖子中建议的那样,在catch块中,用一条用户友好的消息重新播放,比如“无法建立数据库连接”


这里有一个完整的讨论/解释:

首先在共享视图文件夹中添加一个“Error.cshtml”视图。给它一个模型类型
System.Web.Mvc.HandleErrorInfo

然后将以下内容添加到web.config文件中

<system.web>
  <customErrors mode="On" defaultRedirect="/Error" />
</system.web>

这将重定向到任何异常的错误视图

现在只需设置错误页面的样式

我建议您尝试{}catch{},正如在其他帖子中建议的那样,在catch块中,用一条用户友好的消息重新播放,比如“无法建立数据库连接”


这里有一个完整的讨论/解释:

是的,这看起来不错,但每个控制器都有一行代码,所以我认为最好将代码放在函数中的某个位置,并在需要时实例化它。啊,一定要考虑将接口注入控制器,而不是在控制器本身中实例化DBEntities。我使用Ninject,但有很多很多可供选择…是的,这看起来不错,但每个控制器都有一行代码,所以我认为最好将代码放在函数中的某个位置,并在需要时实例化。啊,一定要考虑将接口注入控制器,而不是在控制器本身中实例化DBEntities。我使用Ninject,但还有很多很多可供选择。。。