- PR -

データベース用クラスを作りたいのですが

1
投稿者投稿内容
バニラミント
ベテラン
会議室デビュー日: 2005/05/27
投稿数: 58
投稿日時: 2005-11-20 10:51

毎回、データベースへの接続情報記述しないで
なおかつ、接続開始を1回だけにしようと思い
いままで作ってきたクラスを参考に、
以下のようなクラス作成を考えてみました

windowsフォーム上で、Dim cdb As New dbとしての
利用は可能なのですが、他のフォームでも同じように
宣言しなおさないといけません。

できるなら、最初のフォームでデータベースを接続状態に
しておいて、あとどのフォームでも利用したいのですが
具体的にどのようにすればよいのでしょうか?

やはり、フォーム単位で接続をopen/closeしたほうが
よろしいのでしょうか?

-------------------------------------------------

Public Class db

Private m_cn As OdbcConnection

Public Property cn() As OdbcConnection
Get
Return m_cn
End Get
Set(ByVal Value As OdbcConnection)
m_cn = Value
End Set
End Property

Public Sub New()

cn = New OdbcConnection
cn.ConnectionString = _
"DRIVER={MySQL ODBC 3.51 Driver};" & _
"SERVER=localhost;" & _
"PORT=3306;" & _
"DATABASE=sgdb;" & _
"UID=user;" & _
"PASSWORD=password;" & _
"STMT=SET CHARACTER SET SJIS;" & _
"OPTION=3"

cn.Open()

End Sub

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

バニラミントさんの書き込み (2005-11-20 10:51) より:

なおかつ、接続開始を1回だけにしようと思い
(snip)
やはり、フォーム単位で接続をopen/closeしたほうが
よろしいのでしょうか?


使っていない時は閉じておきましょう。
コネクション プーリングについても調べてみてください。

作るならば、ラッパークラス程度が良いと考えています。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
バニラミント
ベテラン
会議室デビュー日: 2005/05/27
投稿数: 58
投稿日時: 2005-11-21 08:44
じゃんぬねっとさん、お世話になりました。

ラッパクラスについて検索してみたのですが
まだよく理解できず・・・

結局
windowsフォーム内で使い回す用にPrivateとして宣言し
windowsフォームを閉じたらDisposeするようにしました

一点ほど解決できなかった問題がありました。
強引に解決したみたいな形なのですが。

マスタテーブルから名称を取得するクラスを作っていまして
次のようなソースです。

windowsフォーム内ですでに接続を開いているので利用できないかと思い
引数として渡すようにしてみたのですが。

やはりこういったケースでも、データベースの接続を
開いて閉じるというほうがいいのでしょうか?

------------------------------------------------------------------
Public Class db_code

Public Shared Function get_kbnName(ByRef sKey As String, ByRef cn As OdbcConnection) As String

Try
Dim oCmd As OdbcCommand
Dim oRd As OdbcDataReader
Dim sqltxt As String = _
"SELECT field02 FROM code_table WHERE field01 = " & sKey
oCmd = New OdbcCommand(sqltxt, cn)
oRd = oCmd.ExecuteReader
oRd.Read()
Dim ret As String = oRd("field02")
oRd.Close()
oCmd.Dispose()
Return ret
Catch ex As Exception
MessageBox.Show(ex.Message, "区分名取得エラー")
End Try

End Function

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

バニラミントさんの書き込み (2005-11-21 08:44) より:

結局
windowsフォーム内で使い回す用にPrivateとして宣言し
windowsフォームを閉じたらDisposeするようにしました


ちょっと怖いですね。

引用:

windowsフォーム内ですでに接続を開いているので利用できないかと思い
引数として渡すようにしてみたのですが。

やはりこういったケースでも、データベースの接続を
開いて閉じるというほうがいいのでしょうか?


呼び出し元で Finally で Close していれば動作的には問題ないと思います。

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

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