C# と VB.NET の質問掲示板
ASP.NET、C++/CLI、Java 何でもどうぞ
C# と VB.NET の入門サイト
Re[4]: OleDb接続時のハンドル定義の方法
(過去ログ 99 を表示中)
掲示板トップ
C# と VB.NET 入門
新規作成
利用方法/規約
トピック表示
ランキング
記事検索
過去ログ
[トピック内 5 記事 (1 - 5 表示)] <<
0
>>
■58921
/ inTopicNo.1)
OleDb接続時のハンドル定義の方法
▼
■
□投稿者/ エル
(1回)-(2011/05/04(Wed) 15:17:09)
分類:[ASP.NET (VB)]
2011/05/04(Wed) 15:19:07 編集(投稿者)
質問させてください。
今VWD2008(ASP.NET3.5)とAccess2003でWebアプリを作成しています。
(サーバはWindowsServer2003です。)
AccessにOleDbで接続しデータをハンドリングする時のハンドルを
定義する際にUsingを使う場合とDimを使う場合の使い分けについて
教えてください。
msdnのサンプルは、OleDbConnectionのハンドルにのみUsingを使用。
OleDbCommandとOleDbDataReaderのハンドルはDimを使用。
UsingとDimの使い分けの方法とその理由を教えて欲しいです。
http://msdn.microsoft.com/ja-jp/library/system.data.oledb.oledbdatareader
(v=vs.80).aspx
OleDbConnection、OleDbCommandとOleDbDataReaderのハンドル全てにUsingを使用した例
http://adonetvb.com/AdoNetExecuteReaderOle.html
UsingがなかったASP.NET1.x時代にはOleDbConnection、OleDbCommandと
OleDbDataReaderのハンドル全てDimを使用していました。
http://asp35.com/adoAccess/Chapter1/ch1-09.aspx
私は、OleDbConnection、OleDbCommandとOleDbDataReaderのハンドル全て
にUsingを使用するのが良いと思うのですが、msdnのサンプルが使い分けて
いるのが気になります。使い分けの理由を理解し、処理速度のなるべく
速い安定した信頼性の高いコードを書きたいです。
引用返信
編集キー/
編集
■58947
/ inTopicNo.2)
Re[1]: OleDb接続時のハンドル定義の方法
▲
▼
■
□投稿者/ ピートモス
(1回)-(2011/05/06(Fri) 12:30:32)
OleDbConnectionではOpenしたら最後はCloseする必要がありますが、
Usingを使えば、Usingを抜けると自動的にCloseメソッドが実行されます。
このため、OleDbConnectionがUsingで使われているのは、明示的にClose()を
コード上に書かなくてもコネクションのクローズが実行されることを期待しているのでしょう。
処理が終わったら確実にCloseしたい場合(例えばファイルやメモリのストリームなど)には、
Usingを使うのが確実でしょうし(1.xでtry-catch-finallyを行う代わりとして)、
それ以外のIDisposableなクラスで、処理が終わったらリソースの解放を明示的に行いたい場合は、
Usingを使えばいいのではないでしょうか?
引用返信
編集キー/
編集
■58966
/ inTopicNo.3)
Re[2]: OleDb接続時のハンドル定義の方法
▲
▼
■
□投稿者/ エル
(2回)-(2011/05/06(Fri) 18:18:13)
■
No58947
(ピートモス さん) に返信
> OleDbConnectionではOpenしたら最後はCloseする必要がありますが、
> Usingを使えば、Usingを抜けると自動的にCloseメソッドが実行されます。
> このため、OleDbConnectionがUsingで使われているのは、明示的にClose()を
> コード上に書かなくてもコネクションのクローズが実行されることを期待しているのでしょう。
>
> 処理が終わったら確実にCloseしたい場合(例えばファイルやメモリのストリームなど)には、
> Usingを使うのが確実でしょうし(1.xでtry-catch-finallyを行う代わりとして)、
> それ以外のIDisposableなクラスで、処理が終わったらリソースの解放を明示的に行いたい場合は、
> Usingを使えばいいのではないでしょうか?
ピートモスさんお返事ありがとうございます。
Usingは、Usingを抜けると自動的にCloseメソッドが実行される、とても便利で
高機能な機能であると考えています。
msdnのサンプルコード↓でもOleDbConnectionにはUsingを使用しています。
http://msdn.microsoft.com/ja-jp/library/system.data.oledb.oledbdatareader
(v=vs.80).aspx
しかし、同じ事がOleDbDataReaderでも言えるのですが、
このmsdnのサンプルコードでは、OleDbDataReaderではUsingを使用せずDim−Closeで
記述しています。Closeコマンドを記述しています。
msdnのサンプルコードではOleDbConnectionではUsingを使い、OleDbDataReaderでは、
Dim−Closeを使い、使い分けているのです。この使い分けている理由と、Usingと
Dim−Closeの使い分けの方法を理解できたらと考えています。msdnのサンプルコード
がOleDbConnection、OleDbCommandとOleDbDataReaderの3つ全てでUsingを使っていれ
ば納得するのですが、使い分けています。msdnが使い分けているのに理由があると思
うのです。使い分け方の基準をご指導頂けるとありがたいです。よろしくお願いします。
引用返信
編集キー/
編集
■58968
/ inTopicNo.4)
Re[3]: OleDb接続時のハンドル定義の方法
▲
▼
■
□投稿者/ ピートモス
(1回)-(2011/05/06(Fri) 19:19:16)
■
No58966
(エル さん) に返信
> msdnのサンプルコード↓でもOleDbConnectionにはUsingを使用しています。
>
http://msdn.microsoft.com/ja-jp/library/system.data.oledb.oledbdatareader
(v=vs.80).aspx
> しかし、同じ事がOleDbDataReaderでも言えるのですが、
> このmsdnのサンプルコードでは、OleDbDataReaderではUsingを使用せずDim−Closeで
> 記述しています。Closeコマンドを記述しています。
例えば、上記サイトには以下のように記述があります。
> OleDbDataReader を閉じた後に呼び出すことができるのは、IsClosed プロパティと RecordsAffected プロパティだけです。
> RecordsAffected プロパティは、OleDbDataReader が存在している間はいつでも呼び出すことできますが、正しい戻り値を得るために、
> RecordsAffected の値を取得する前には、必ず Close を呼び出してください。
Close後に参照できるメンバがあるという説明があるため、あえてOleDbDataReaderのCloseメソッドを使っているのかも知れません。
(Usingで閉じたらこれらメンバにはアクセスできませんしね。)
ただし、OleDbDataReaderをCloseした後にこれらのメンバを参照する必要がないならば、Usingを使った方がいいのではないでしょうか?
それに、インスタンスのDisposeという観点においてはIDisposableなクラスにおいてはUsingを使うように統一した方がすっきりするかも知れません。
そもそも、msdnのサンプルは色々な人が作成していると思いますので、厳密に統一されているという保証もないでしょうし、
あまり深く考えずに、あくまでもサンプルだととらえればいいような気もします。
引用返信
編集キー/
編集
■58986
/ inTopicNo.5)
Re[4]: OleDb接続時のハンドル定義の方法
▲
▼
■
□投稿者/ エル
(3回)-(2011/05/08(Sun) 11:15:41)
■
No58968
( ピートモス さん) に返信
ピートモスさん丁寧な解説ありがとうございます。
OleDbCommandクラス、OleDbDataReaderクラスの機能・仕様を理解して
UsingとDim−Closeを使い分ける必要がある事がわかりました。
また、msdsのサンプルコードもこれらの事を配慮し記述されてあるサンプル
コードであると理解しました。
ご指導ありがとうございました。
> CommandText プロパティをリセットして、OleDbCommand オブジェクトを再利
> 用できます。ただし、新規コマンドまたは以前のコマンドを実行する前に、
> OleDbDataReader を閉じる必要があります。
> OleDbDataReader を閉じた後に呼び出すことができるのは、IsClosed プロパ
> ティと RecordsAffected プロパティだけです。RecordsAffected プロパティは、
> OleDbDataReader が存在している間はいつでも呼び出すことできますが、正し
> い戻り値を得るために、RecordsAffected の値を取得する前には、必ず Close
> を呼び出してください。
解決済み
引用返信
編集キー/
編集
トピック内ページ移動 / <<
0
>>
このトピックに書きこむ
過去ログには書き込み不可
管理者用
-
Child Tree
-