C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[2]: ExecuteReaderでエラーがでます


(過去ログ 43 を表示中)

[トピック内 6 記事 (1 - 6 表示)]  << 0 >>

■22696 / inTopicNo.1)  ExecuteReaderでエラーがでます
  
□投稿者/ 虎の親 (1回)-(2008/07/29(Tue) 20:44:17)

分類:[C#] 

KokyakuMstのIDからUriageTblを複数件取得するロジックですが、

1 SC.CommandText = "SELECT ID,YUBIN,JUSYO FROM KokyakuMst ORDER BY ID";
2 System.Data.SqlClient.SqlDataReader Kokyaku_R = SC.ExecuteReader();
3 SC.Dispose();
4 while (Kokyaku_R.Read())
5 {
6 SC.CommandText = "SELECT KANRICD,YYYYMM,KIND,PRT FROM UriageTbl WHERE ID1 = '";
7 SC.CommandText += Kokyaku_R["ID"].ToString();
8 SC.CommandText += "'";
9 System.Data.SqlClient.SqlDataReader Uriage_R = SC.ExecuteReader();
10 SC.Dispose();
11 while (Uriage_R.Read())

9行目で「このコマンドに関連付けられている DataReader が既に開かれています。このコマンドを最初に閉じる必要があります。」
と言うエラーがでます。
3行目でDispose()しているのに・・・。
解決方法を教えてください。
お願いします。
引用返信 編集キー/
■22698 / inTopicNo.2)  Re[1]: ExecuteReaderでエラーがでます
□投稿者/ やじゅ (505回)-(2008/07/29(Tue) 21:54:24)
やじゅ さんの Web サイト
No22696 (虎の親 さん) に返信
> 3行目でDispose()しているのに・・・。

Close()してください。Close()とDispose()は違うので
引用返信 編集キー/
■22701 / inTopicNo.3)  Re[2]: ExecuteReaderでエラーがでます
□投稿者/ なちゃ (154回)-(2008/07/29(Tue) 23:31:13)
No22698 (やじゅ さん) に返信
> ■No22696 (虎の親 さん) に返信
>>3行目でDispose()しているのに・・・。
>
> Close()してください。Close()とDispose()は違うので

いやそういう問題じゃなくて、そもそもSCって何?
SCのDisposeでKokyaku_RのDisposeされる実装ならそもそも読む前にDisposeすることになるのでこれはあり得ない。
なのでKokyaku_Rは結局Disposeしてない。

何をいつDisposeするのかきちんと考えて実装しないと。
何でもいいからDisposeというわけにはいかない。

引用返信 編集キー/
■22704 / inTopicNo.4)  Re[3]: ExecuteReaderでエラーがでます
□投稿者/ なちゃ (155回)-(2008/07/30(Wed) 02:43:26)
> いやそういう問題じゃなくて、そもそもSCって何?

いやSCはSqlCommandですねきっと。
まあどっちにしても
>何をいつDisposeするのかきちんと考えて実装しないと。
です。

引用返信 編集キー/
■22744 / inTopicNo.5)  Re[1]: ExecuteReaderでエラーがでます
□投稿者/ いしだ (160回)-(2008/07/31(Thu) 10:21:11)
以下の方法が考えられるんじゃないでしょうか。

・最初にList等に値を取得してから、再度ループで値を取得する
・SQL文を1つにまとめる
・接続を2つ作る
引用返信 編集キー/
■22747 / inTopicNo.6)  Re[2]: ExecuteReaderでエラーがでます
□投稿者/ 虎の親 (3回)-(2008/07/31(Thu) 11:33:56)
No22744 (いしだ さん) に返信
> 以下の方法が考えられるんじゃないでしょうか。
>
> ・最初にList等に値を取得してから、再度ループで値を取得する
> ・SQL文を1つにまとめる
> ・接続を2つ作る

> ・SQL文を1つにまとめる
でやることにしました。
有難うございました。
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -