繁体   English   中英

ExecuteReader之后关闭OracleConnection

[英]Close OracleConnection after ExecuteReader

这是我目前的模式

private void ReadData(string connString, string cmdString)
{
    using (OracleConnection conn = new OracleConnection(connString))
    {
        conn.Open();
        OracleCommand cmd = new OracleCommand(cmdString, conn);
        OracleDataReader reader = cmd.ExecuteReader();
        //some long operation using reader
    }
}

在上述情况下,长时间进行操作时,连接保持打开状态。 有没有一种方法可以关闭连接但仍保留阅读器。 那会有利吗?

如果长时间操作意味着您需要对数据库执行额外的操作(例如更新/插入/删除),那么您将无法关闭连接。

如果要读取数据并根据其进行一些计算,则应将模式修改为:1.读取所有数据,2.关闭连接,3.对数据进行长时间操作。

using System;
using System.Collections.Generic;
using Oracle.DataAccess.Client;

namespace Utils
{
    class Test
    {
        private class Class
        {
            public string FirstProperty { get; set; }
            public string SecondProperty { get; set; }
        }

        private void ReadData(string connString, string cmdString)
        {
            List<Class> data = new List<Class>();
            using (OracleConnection conn = new OracleConnection() { ConnectionString = connString })
            using (OracleCommand objCmd = new OracleCommand()
            {
                Connection = conn,
                CommandText = cmdString
            })
            {
                try
                {
                    conn.Open();
                }
                catch (OracleException)
                {
                    OracleConnection.ClearPool(conn);
                    conn.Open();
                }
                using (OracleDataReader dataReader = objCmd.ExecuteReader())
                {
                    while (dataReader.Read())
                        data.Add(new Class()
                        {
                            FirstProperty = dataReader.GetString(0),
                            SecondProperty = dataReader.GetString(1)
                        });
                }
                conn.Close();
            }
            //some long operation using data
        }
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM