- PR -

クラスを使用する際のコネクションの閉じ方

投稿者投稿内容
Kazuki
ぬし
会議室デビュー日: 2004/10/13
投稿数: 298
投稿日時: 2006-09-04 19:28
確かに、ほとんど意味無さそうですね。

後は、本題とは関係ないですが皆が見る場に書くコードは
http://msdn.microsoft.com/library/ja/default.asp?url=/library/ja/cpgenref/html/cpconnamingguidelines.asp
に従った方が吉です。
.NETの名前付けガイドラインです。

なおこ(・∀・)
大ベテラン
会議室デビュー日: 2004/04/08
投稿数: 174
お住まい・勤務地: 東京都
投稿日時: 2006-09-04 19:46
お世話になります。

あまり意味がないと思うに一票です。

というか、もともとどこでコネクションを管理したいのかが見えません。
もしコネクションの Open Close を外部でやりたくないのであれば、
こんなやり方もあろうかと思います。

clsDR クラス の Get_DR メソッド内で
ExecuteReader するときに、CommandBehavior.CloseConnection を渡してやる。
そして、
呼び出し元で DataReader を Finally ブロック等で Close してやる。
_________________
なおこ(・∀・) @ わんくま同盟
主婦と.NETと犬の記録
主婦と.NETと犬のぶろぐ
モンジ
ベテラン
会議室デビュー日: 2005/09/06
投稿数: 85
投稿日時: 2006-09-05 10:05
皆様、レスありがとうございます。

かるあさん、確かにクラス化する必要が無いですね。
Kazukiさん、今まで何も気にせずにコードを書いていました。恥ずかしいです。

さて、皆様のアドバイスもあり、
DB接続のクラスを作成し、再度、コーディングしてみました。


コード:
クラス側
Public Class DB
    'メンバ変数
    Private oCn As New OracleConnection
    Public Property Get_Cn()
        Get
            Return oCn
        End Get
        Set(ByVal Value)
            oCn = Value
        End Set
    End Property

    Public Sub New()
        oCn.ConnectionString = "接続文字列"
    End Sub
End Class


コード:
呼び出し側
    Dim DR As OracleDataReader
        Dim strSQL As String = _
       "SQL文"

        'クラスのインスタンス化
        Dim DBC As New DB
        DBC.Get_Cn.open()

        Dim oCmd As New OracleCommand(strSQL, DBC.Get_Cn)

        DR = oCmd.ExecuteReader()

        DRを操作

    DBC.Get_Cn.close()


じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-09-05 10:24
引用:

モンジさんの書き込み (2006-09-05 10:05) より:

DBC.Get_Cn.open()


せっかくラップしているのですから、ConnectionOpen メソッドを提供した方が安全だと思うのですが...

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
R・田中一郎
ぬし
会議室デビュー日: 2005/11/03
投稿数: 979
投稿日時: 2006-09-05 10:24
僕は、こんな感じで書けるようにするのが大好きです。

コード:
呼び出し側
    Dim DR As OracleDataReader
    Using (DBC As New でえたべえすいろいろ)
        DR = DBC.ReaderGet("SQL文")
        あれこれやる・・・
    End Using

    *VBてこんなんであってるん?


じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-09-05 10:33
引用:

R・田中一郎さんの書き込み (2006-09-05 10:24) より:

Using (DBC As New でえたべえすいろいろ)
*VBてこんなんであってるん?


括弧でくくるとコンパイル エラーですね。

コード:

    Using oRTanakaIchiro As New RTanakaIchiro("...")
        ' :
    End Using 'Dispose here!

    Using oPrincePopi As PrincePopi = New PrincePopi("...")
        ' :
    End Using 'Dispose here!


が、正解です。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
うにくま
ベテラン
会議室デビュー日: 2005/11/05
投稿数: 82
投稿日時: 2006-09-05 11:05
VBではUsingステートメントは使用できません、C#のみ使用できます。

モンジさんはVB2003で開発していると記述されているので、
もし、VB2005での例を示すのであれば、
その旨を明記しないと混乱されると思いますよ?
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-09-05 11:35
引用:

うにくまさんの書き込み (2006-09-05 11:05) より:

モンジさんはVB2003で開発していると記述されているので、
もし、VB2005での例を示すのであれば、
その旨を明記しないと混乱されると思いますよ?


失礼しました。
単に引用返答していたので、気付きませんでした。

Using ステートメントは VB8 で使用可能ですが、VB7.1 以前の場合は以下のようになります。

コード:

    Dim oRTanakaIchiro As RTanakaIchiro = Nothing

    Try
        oRTanakaIchiro = New RTanakaIchiro("...")
    Finally
        If Not oRTanakaIchiro Is Nothing Then
            DirectCast(oRTanakaIchiro, System.IDisposable).Dispose()
        End If
    End Try


_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌

スキルアップ/キャリアアップ(JOB@IT)