Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/325.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
如何在不同的查询中使用OracleConnection C#_C#_Oracle_Odac - Fatal编程技术网

如何在不同的查询中使用OracleConnection C#

如何在不同的查询中使用OracleConnection C#,c#,oracle,odac,C#,Oracle,Odac,我无法理解如何使用OracleConnection对象 是否将其用于所有查询?还是一个查询一个连接 我的计划是: 1) 从Oracle数据库(游标)接收数据(~100.000-1.000.000条记录) 2) 对于每个选定记录(id),更新另一个表中的值 什么是正确的: 1) 为每个查询创建OracleConnection using(OracleConnection connection = new OracleConnection(connectionString)) { usi

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

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

我的计划是:

1) 从Oracle数据库(游标)接收数据(~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();
        ...
    }
}

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

请记住,无论是在客户端还是在数据服务器端,打开
OracleConnection
都非常昂贵

通常,指导原则是1线程=>1
OracleConnection


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

我要说的是,对于所有这些更新,有一个明显的开销打开了100000多个连接。但是如果你没有为了这个问题而简化你的任务/代码,我会争论为什么要写任何C#代码?从一个数据库到另一个数据库的简单更新可以直接在SQL中完成。因为我想在保存到数据库之前有机会从程序中更改值或使用它做一些事情,我主要只想学习C#-Oracle通信,而我的程序没有做一些有用的事情。。。