0

複数のフォームがあり、各フォームは MySQL サーバーへの接続を必要とする特定のタスクを実行します。
各フォームでは、これらが宣言されています。

Imports MySql.Data.SqlClient

Dim myConnObj As New MySqlConnection

そして、私はそれらを次のように使用します:

myConnObj = New MySqlConnection()
myConnObj.ConnectionString = "Server=" & db_Server & ";Database=" & dbase & ";UID= & "db_UserID & ";PWD=" & db_Password
myConnObj.Open()

''Things to do here

myConnObj.Close

このプロセスをクラスに変換してコードを最小限に抑えたいのですが、すべてのフォームで利用できるはずですが、どこから始めればよいかわかりません。clsConnect.vb という名前の VB で既に空のクラスを作成しましたが
、"dbase" (接続先のデータベース) は異なる必要があることに注意してください。
前もって感謝します。

4

1 に答える 1

0

さて、あなたはシングルトンアプローチを取りに行きます:

VB.NET:

Public Class DBase
    #Region "Singleton"

    Private Shared instances As New Dictionary(Of [String], DBase)()
    Public Shared Function GetInstance(dbname As [String]) As DBase
        If Not instances.ContainsKey(dbname) Then
            instances(dbname) = New DBase(dbname)
        End If
        Return instances(dbname)
    End Function

    #End Region

    Private connection As MySqlConnection

    Private Sub New(dbase As [String])
        Me.connection = New MySqlConnection()
        Me.connection.ConnectionString = "...connection string implementing dbase..."
        Me.connection.Open()
    End Sub

    Protected Overrides Sub Finalize()
        Try
            Me.connection.Close()
        Finally
            MyBase.Finalize()
        End Try
    End Sub

    #Region "Database Methods"

    ' add the various method calls to the database here.

    #End Region
End Class

'=======================================================
'Service provided by Telerik (www.telerik.com)
'Conversion powered by NRefactory.
'Twitter: @telerik, @toddanglin
'Facebook: facebook.com/telerik
'=======================================================

C#

public class DBase
{
  #region Singleton

  private static Dictionary<String, DBase> instances = new Dictionary<String, DBase>();
  public static DBase GetInstance(String dbname)
  {
    if (!instances.ContainsKey(dbname))
    {
      instances[dbname] = new DBase(dbname);
    }
    return instances[dbname];
  }

  #endregion

  private MySqlConnection connection;

  private DBase(String dbase)
  {
    this.connection = new MySqlConnection();
    this.connection.ConnectionString = "...connection string implementing dbase...";
    this.connection.Open();
  }

  ~DBase()
  {
    this.connection.Close();
  }

  #region Database Methods

  // add the various method calls to the database here.

  #endregion
}

次に、どこからでもアクセスして呼び出しを行うことができます。

VB.NET

Dim db As DBase = DBase.GetInstance("DEMO")
Dim name As [String] = db.GetUsernameFromEmail("jsmith@contoso.com")

C#

DBase db = DBase.GetInstance("DEMO");
String name = db.GetUsernameFromEmail("jsmith@contoso.com");

非常に粗雑ですが、仕事を成し遂げます。検証、接続チェック、クリーンアップ、および (場合によっては) スレッド セーフを使用して、さらに複雑にすることもできますが、例は簡潔でわかりやすいものにします。

于 2013-04-26T17:08:33.930 に答える