私の現在のアプリケーションでは、SQL問合せを実行し、処理を続行する前に返される結果の数を取得する必要があります。これは、以下の私のコードです:OracleDataReaderが例外をスローします
if (GetCount(reader) == 1)
{
reader.Read();
Console.WriteLine(reader["field1"]);
Console.WriteLine(reader["field2"]);
}
そして、これは、それがあれば、コードブロックに入ったときに、結果のカウントを受け取った後GetCount()
方法
public static int GetCount(OracleDataReader reader)
{
int count = 0;
while (reader.Read())
{
count++;
}
return count;
}
で、例外が述べて投げます:
[System.InvalidOperationException] = {"Operation is not valid due to the current state of the object."}
ただし、カウントが得られない場合は正常に動作します。
私のGetCount関数はreader.Read()を持っているので、値を読み取る前に何らかの形でリーダーをリセットする必要があると思いますか?正直なところ、私は困惑しています。助言がありますか?
編集; 最初のコードブロックでは、私がコメントアウトしても同じ例外が発生しますreader.Read();
私は値でGetCountのを読者に渡すとき、私の元読者がそのまま残るようにしかし、それは、コピーを作成しないのですか? – xbonez
@xbonez読者が参照型であるということは、読者のコピーではなく値で参照のコピーを送ることを意味します。あなたは同じリーダーを指しています –
恐ろしい回避策かもしれませんが、GetCountにリーダーを渡した後、別のDatareader変数にコピーしてカウントを取得すると使用できますか? – xbonez