来自c#的Oracle Connections

时间:2017-06-27 19:30:31

标签: c# .net oracle winforms

我有动态仪表板,每3秒从oracle到c#winforms获得20个查询。

目前我使用如下;

OracleConnection con = new OracleConnection(oradb);
con.Open();
OracleCommand cmd1 = new OracleCommand(getSystime, con);
OracleDataReader dr1 = cmd1.ExecuteReader();
dr1.Read();
.
.
.
.
.
.
OracleCommand cmd15 = new OracleCommand(getSqltime, con);
OracleDataReader dr15 = cmd15.ExecuteReader();
dr15.Read();

con.Dispose();
con.Close();

目前,当我检查时,该应用程序有9个非活动会话,并且有近100个打开的游标。数字没有增加。即使我在1小时后检查,我的应用程序中有9个活动/非活动和几乎100个open_cursor。

这将是我的第一个申请,因此我没有任何经验。

我怎么解释它?

2 个答案:

答案 0 :(得分:2)

阅读完内容后,您应始终Close() OracleDataReader。并在using {}实施IDisposable

时将其包围起来
using ( OracleConnection con = new OracleConnection(oradb) ) {
   con.Open();
   OracleCommand cmd1 = new OracleCommand(getSystime, con);
   using ( OracleDataReader dr1 = cmd1.ExecuteReader() ) {
      dr1.Read();
      ...
      dr1.Close();
   }
}

答案 1 :(得分:0)

不确定我理解你的问题但是 尝试使用

OracleDataAdapter

而不是

OracleDataReader

我的理解是DataReader比DataAdapter更快,但DataReader在连接模式下工作。 DataAdapter / DataSet在断开连接模式下工作。

这可能是您在一段时间后未收到查询的原因。