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

How to use OracleConnection with different queries C#

我不明白如何使用 OracleConnection 对象

将它用于所有查询?还是一个连接一个查询?

我的程序做:

1) 从 Oracle DB(游标)接收数据(~100.000 - 1.000.000 条记录)

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

正确的是:

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 个数据库连接。

请记住,打开 OracleConnection 在客户端和数据服务器端都非常昂​​贵。

通常,准则是 1 个线程 => 1 OracleConnection

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