0

関数で毎秒同じクエリを実行する必要がありますGetStuffが、1、2 分後に Oracle が ORA-00604 をスローしてカーソルが不足すると、結果を返した後に開いているカーソルを何らかの形で閉じる必要があると思います。ただし、クエリが必要になるたびに再接続するという考えは好きではありません。私のコードは次のとおりです。

public MyStuff GetStuff(string paramValue)
{
    OracleCommand command = connection.CreateCommand();
    command.CommandText = "select XXX from YY where param = ? ";
    command.Parameters.Add(":param ", OracleDbType.Varchar2).Value = paramValue;
    IDataReader reader = command.ExecuteReader();
    while (reader.Read())
    {
       ...
    }
    command.Dispose();
    return stuff;
 }
4

1 に答える 1

0

リーダーも廃棄する必要があります。

public MyStuff GetStuff(string paramValue)
{
    using (OracleCommand command = connection.CreateCommand())
    {
        command.CommandText = "select XXX from YY where param = ? ";
        command.Parameters.Add(":param ", OracleDbType.Varchar2).Value = paramValue;
        using (IDataReader reader = command.ExecuteReader())
        {
            while (reader.Read())
            {
            ...
            }
        }
        return stuff;
    }
}

IDisposablesと対話するための非常に推奨される方法であるusingステートメントをご覧ください。

于 2012-12-03T10:23:50.060 に答える