代码改变世界

处理异常

2008-09-11 16:18  晓彦  阅读(329)  评论(0)    收藏  举报

处理异常的策略在任何企业应用程序中都是必不可少的。下列信息将帮助你添加数据访问应用程序块到管理异常的方法中去:

  • CreateDatabase 方法使用配置信息,其可能的结果在配置相关的异常中。
  • Database 方法使用 ADO.NET 和底层数据库提供程序。由 ADO.NET 抛出的异常由数据访问应用程序块为度量的目的而捕获,然后再次抛出。
  • 充分处理异常通常要求访问特定的异常类型。可以包含用于特定数据库提供程序的异常如 SqlExceptioncatch 语句。然而数据库提供程序专用的异常类型在不同提供程序之间不能移植。
  • 使用 CommandBehavior.CloseConnection 调用 ExecuteReader。它在 DataReader 关闭时关闭连接。如果在一个 try 块中使用 ExecuteReader ,可以添加一个 finally 语句并关闭返回的 DataReader 对象,就像展示在下列示例中的一样。

 

C#

Database db = DatabaseFactory.CreateDatabase();

DbCommand dbCommand = db.GetStoredProcCommand("GetProductsByCategory");

 

IDataReader dataReader = null;

 

try

{

 //...

 dataReader = db.ExecuteReader(dbCommand);

}

catch(Exception ex)

{

 // Process exception

}

finally

{

 if (dataReader != null)

    dataReader.Close();

}

 

Visual Basic

Dim db As Database = DatabaseFactory.CreateDatabase()

Dim dbCommand As DbCommand = db.GetStoredProcCommand("GetProductsByCategory")

 

Dim dataReader As IDataReader = Nothing

 

Try

 ' ...

 dataReader = db.ExecuteReader(dbCommand)

Catch ex As Exception

 ' Process exception

Finally

 If (Not dataReader Is Nothing) Then

    dataReader.Close()

 End If

End Try


另一种方法是,可以包含 using 语句来销毁 DataReader 对象,这将导致它的关闭,就像展示在下列示例中一样。

C#

Database db = DatabaseFactory.CreateDatabase();

DbCommand dbCommand = db.GetStoredProcCommand("GetProductsByCategory");

 

using (IDataReader dataReader = db.ExecuteReader(dbCommand))

{

    // Process results

}

 

Visual Basic

Dim db As Database = DatabaseFactory.CreateDatabase()

Dim dbCommand As DbCommand = db.GetStoredProcCommand("GetProductsByCategory")

 

Using dataReader As IDataReader = db.ExecuteReader(dbCommand)

 

 ' Process results

 

End Using


对于在 .NET 中的异常管理的设计和实现原则,请参见异常管理架构指南