如何将 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
池,只需在连接字符串中设置一些参数。
我不明白如何使用 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
池,只需在连接字符串中设置一些参数。