我无法理解如何使用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();
...
}
}
答案 0 :(得分:0)
在你的情况下,我更喜欢第二个,只有一个数据库连接。
请注意,在客户端和数据服务器端打开OracleConnection
都很昂贵。
通常,指南是1个线程=> 1 OracleConnection
。
如果您有多个线程或者您仍然想要使用多个OracleConnection
,则可以定义一个OracleConnection
池,只需在连接字符串中设置一些参数即可。