C# 混音`最后使用/尝试捕捉`
我在应用程序中使用的是C# 混音`最后使用/尝试捕捉`,c#,oracle,resources,dispose,odp.net,C#,Oracle,Resources,Dispose,Odp.net,我在应用程序中使用的是Oracle.ManagedDataAccess.Client。以下是我如何处理释放/关闭资源/连接: OracleConnection conn = new OracleConnection(oradb); try { conn.Open(); ... using (OracleCommand command = new OracleCommand(queryString, conn)) { using (OracleDa
Oracle.ManagedDataAccess.Client
。以下是我如何处理释放/关闭资源/连接:
OracleConnection conn = new OracleConnection(oradb);
try
{
conn.Open();
...
using (OracleCommand command = new OracleCommand(queryString, conn))
{
using (OracleDataReader reader = command.ExecuteReader(System.Data.CommandBehavior.SingleRow))
{
if (reader.Read())
{
...// reading data here
}
}
}
}
catch (Exception e)
{
// log error
}
finally
{
conn.Close();
conn.Dispose();
}
问题:
和try/catch混用吗李>
显示Close
method的ODP.NET示例用于阅读器
。调用dispose
(希望如此)的usage
是否也关闭了读卡器
上述实施是否保证在大多数情况下关闭Oracle连接
是的,你可以同时使用Catch和Finally。但是如果OracleConnection
是一次性的,那么我会使用using
自动关闭和处理。我还需要知道OracleConnection
是否会在处理后关闭连接,对吗?我还需要知道OracleConnection是否会在处理后关闭连接,对吗?如果OracleConnection是一次性的,那么可以安全地假设它关闭了连接。这将是一个写得非常糟糕的连接类,可以一次性使用,但不能关闭它自己的连接。视情况而定。如果使用连接池(默认),则连接将返回到该池,物理会话将保留在数据库中,并在另一个OracleConnection实例打开时重新连接。但您不能再使用已处置的实例访问它。如果使用非池连接,则会话将终止,正如我所说的,如果使用池连接,则数据库中的会话不会终止。您可以设置连接生存期,如果没有活动,Oracle应在该生存期之后终止会话。否则,会话将永久保留(直到进程退出)。Close/Dispose仅处理.NET和客户端非托管资源。是的,您可以同时使用Catch和Finally。但是如果OracleConnection
是一次性的,那么我会使用using
自动关闭和处理。我还需要知道OracleConnection
是否会在处理后关闭连接,对吗?我还需要知道OracleConnection是否会在处理后关闭连接,对吗?如果OracleConnection是一次性的,那么可以安全地假设它关闭了连接。这将是一个写得非常糟糕的连接类,可以一次性使用,但不能关闭它自己的连接。视情况而定。如果使用连接池(默认),则连接将返回到该池,物理会话将保留在数据库中,并在另一个OracleConnection实例打开时重新连接。但您不能再使用已处置的实例访问它。如果使用非池连接,则会话将终止,正如我所说的,如果使用池连接,则数据库中的会话不会终止。您可以设置连接生存期,如果没有活动,Oracle应在该生存期之后终止会话。否则,会话将永久保留(直到进程退出)。Close/Dispose仅处理.NET和客户端非托管资源。