Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.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# 混音`最后使用/尝试捕捉`_C#_Oracle_Resources_Dispose_Odp.net - Fatal编程技术网

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和客户端非托管资源。