OracleDataReaderを使った行取得
- 題名: OracleDataReaderを使った行取得
- 著者: まだらねこ
- 日時: 2005/07/01 14:12:27
- ID: 11581
- この記事の返信元:
- この記事への返信:
- ツリーを表示
- 題名: Re[2]: OracleDataReaderを使った行取得
- 著者: まだらねこ
- 日時: 2005/07/05 16:16:19
- ID: 11626
- この記事の返信元:
- この記事への返信:
- ツリーを表示
- 題名: Re[3]: OracleDataReaderを使った行取得
- 著者: まだらねこ
- 日時: 2005/07/06 11:25:19
- ID: 11636
- この記事の返信元:
- この記事への返信:
- ツリーを表示
- 題名: Re[4]: OracleDataReaderを使った行取得
- 著者: まだらねこ
- 日時: 2005/07/14 13:50:14
- ID: 11793
- この記事の返信元:
- この記事への返信:
- ツリーを表示
分類:[.NET]
C#でOracleDataReaderを使ったレコードの取得をしようとしています。
下記のコードで、command.ExecuteReader()の次の行に
ブレークポイントを置いてデバッグすると、正常にレコードが取れますが、
ブレークポイントをおかずにデバッグすると、
「Invalid attempt to read when no data is present」
というExceptionメッセージが発生します。
これは、OracleDataReaderへのデータの読み込みが遅いために、
ExecuteReder()メソッドがちゃんとOracleDataReaderにデータを読み込む前に
次の処理に行こうとして、出ているエラーのような気がしています。
どなたか同じような現象をご存知の方はご教授ください。
よろしくお願いします。
↓↓↓以下、ソースです。−−−
private void setJiku()
{
OracleCommand command = this.oracleConnection1.CreateCommand();
OracleTransaction trans;
this.oracleConnection1.Open();
trans = this.oracleConnection1.BeginTransaction();
command.Transaction = trans;
string sJcd = "0";
System.Text.StringBuilder sql = new System.Text.StringBuilder();
System.Text.StringBuilder sql2 = new System.Text.StringBuilder();
try
{
sql.Append("SELECT JIKU_CD FROM ");
sql.Append(" (SELECT ROWNUM, JIKU_CD FROM ROMAP_JIKU_SET ");
sql.Append(" ORDER BY JIKU_CD DESC)");
sql.Append(" WHERE ROWNUM = 1 ");
//最終レコードの取得
command.CommandText = sql.ToString();
OracleDataReader reader1 = command.ExecuteReader();
//↓ここでブレークするとうまくいくのですが、ブレークしないとエラーとなるのです
sJcd = reader1.GetValue(0).ToString();
//sJcdをインクリメントする
if(( 0 < int.Parse(sJcd) )&&( int.Parse(sJcd) < 999 ))
{
int iJcd = int.Parse(sJcd) + 1;
sJcd = iJcd.ToString().PadLeft(3,'0');
}
else
{
MessageBox.Show("これ以上のレコード追加はできません");
}
reader1.Close();
//レコード追加
sql2.Append("INSERT INTO ROMAP_JIKU_SET ");
sql2.Append("(JIKU_CD)");
sql2.Append(" VALUES( '" + sJcd + "')");
command.CommandText = sql.ToString();
command.ExecuteNonQuery();
trans.Commit();
}
catch(Exception e)
{
trans.Rollback();
MessageBox.Show(e.Message);
}
this.oracleConnection1.Close();
}