如何将OracleConnection与不同的查询一起使用C#

时间:2017-01-25 20:00:09

标签: c# oracle odac

我无法理解如何使用OracleConnection对象

将它用于所有查询?或者一个查询的一个连接?

我的程序:

1)从Oracle DB(光标)接收数据(〜100.000 - 1.000.000记录)

2)对于每个选定的记录(id)更新另一个表的值

什么是正确的:

1)为每个查询创建OracleConnection

using(OracleConnection connection = new OracleConnection(connectionString))  
{
    using(OracleCommand command = new OracleCommand(recieveSql, connection))
    {
        connection.Open();
        ...
        command.ExecuteNonQuery();
        ...
        using(OracleDataReader reader = command.ExecuteReader())
        {
            while(reader.Read())
            {
                int id = reader.GetInt32(0);
                string value = reader.GetInt32(1);
                UpdateRecord(id, value);
            }
        }
    }
}


private void UpdateRecord(int id, string value)
{
    using(OracleConnection connection = new OracleConnection(connectionString))  
    {
        using(OracleCommand command = new OracleCommand(updateSql, connection))
        {
            connection.Open();
            ...
            command.Parameters.AddWithValue("@id", id);
            command.Parameters.AddWithValue("@value", value);
            command.ExecuteNonQuery();
            ...
        }
    }
}

2)对所有查询使用1个OracleConnection

using(OracleConnection connection = new OracleConnection(connectionString))  
{
    using(OracleCommand command = new OracleCommand(recieveSql, connection))
    {
        connection.Open();
        ...
        command.ExecuteNonQuery();
        ...
        using(OracleDataReader reader = command.ExecuteReader())
        {
            while(reader.Read())
            {
                int id = reader.GetInt32(0);
                string value = reader.GetInt32(1);
                UpdateRecord(connection, id, value);
            }
        }
    }
}


private void UpdateRecord(OracleConnection connection, int id, string value)
{
    using(OracleCommand command = new OracleCommand(updateSql, connection))
    {
        ...
        command.Parameters.AddWithValue("@id", id);
        command.Parameters.AddWithValue("@value", value);
        command.ExecuteNonQuery();
        ...
    }
}

1 个答案:

答案 0 :(得分:0)

在你的情况下,我更喜欢第二个,只有一个数据库连接。

请注意,在客户端和数据服务器端打开OracleConnection都很昂贵。

通常,指南是1个线程=> 1 OracleConnection

如果您有多个线程或者您仍然想要使用多个OracleConnection,则可以定义一个OracleConnection池,只需在连接字符串中设置一些参数即可。