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

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

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

Re[3]: SqlDataAdapter の Dispose


(過去ログ 76 を表示中)

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

■45137 / inTopicNo.1)  SqlDataAdapter の Dispose
  
□投稿者/ もりお (148回)-(2010/01/01(Fri) 18:42:54)

分類:[VB.NET/VB2005 以降] 

SqlDataAdapter.Dispose はリソースリークの観点から呼び出す必要があるのか
お教えいただきたいです。

次のようなプログラムを記述しました。
・SqlDataAdapter.Fill にてデータを取得する。
・Connection.Open は明示的に呼ばない。
・Connection の状態が変わったら Connection の状態を出力する。
・SqlDataAdapter.Dispose は呼ばない。

Imports System.Data
Imports System.Data.SqlClient
Imports System.Threading

Module Module1

    Sub Main()
        AddHandler Thread.GetDomain().UnhandledException, AddressOf ApplicationUnhandledException
        
        Dim adapter As New SqlDataAdapter("Select * From [test]", "connectionString")
        AddHandler adapter.SelectCommand.Connection.StateChange, AddressOf ConnectionStateChange

        Dim table As New DataTable()
        adapter.Fill(table)

        Console.ReadKey()
    End Sub

    Sub ConnectionStateChange(ByVal sender As Object, ByVal e As StateChangeEventArgs)
        Console.WriteLine("Connection {0}", e.CurrentState.ToString())
    End Sub

    Sub ApplicationUnhandledException(ByVal sender As Object, ByVal e As UnhandledExceptionEventArgs)
        Console.WriteLine(DirectCast(e.ExceptionObject, Exception).Message)
    End Sub
End Module

SqlDataAdapter.Fill は明示的に接続を開いていない場合、自動的に接続を開いて自動的
に閉じるので例外が発生しない場合の出力は
Connection Open
Connection Closed
になりました。

さらに、 存在しないテーブルを SQL に記述して例外(SqlException)が発生した場合も
接続は閉じられるようで、このように出力されました。
Connection Open
オブジェクト名 'test2' が無効です。
Connection Closed

SqlDataAdapter.Dispose は呼ばなくて善いような気がしているのですが、呼ばないこと
によるリソースリークの危険性はあるのか、例外の発生タイミングによってはまずいかも
などありましたら、お教えいただきたい次第です。

引用返信 編集キー/
■45138 / inTopicNo.2)  Re[1]: SqlDataAdapter の Dispose
□投稿者/ とんま (1回)-(2010/01/01(Fri) 19:18:45)
ない。GC対象。
引用返信 編集キー/
■45140 / inTopicNo.3)  Re[2]: SqlDataAdapter の Dispose
□投稿者/ もりお (149回)-(2010/01/01(Fri) 22:59:44)
No45138 (とんま さん) に返信
> ない。GC対象。
ご回答ありがとうございます。
SqlDataAdapter の Dispose は SqlConnection オブジェクトとは関わりが無
いわけですね。今まで何も考えずに Dispose という乱暴を働いていました。
ありがとうございました。

引用返信 編集キー/
■45142 / inTopicNo.4)  Re[3]: SqlDataAdapter の Dispose
□投稿者/ もりお (150回)-(2010/01/01(Fri) 23:04:07)
No45140 (もりお さん) に返信

解決済み
引用返信 編集キー/


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

このトピックに書きこむ

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

管理者用

- Child Tree -