VB.NET MySQL Connection открыт для всех форм - PullRequest
0 голосов
/ 07 ноября 2011

В первой форме я буду загружать Табелс во вторник, я хочу открыть соединение с БД.

Я написал класс, который позволяет мне открывать и закрывать соединение

Imports System
Imports System.Data
Imports MySql.Data.MySqlClient

Public Class DBConn


Dim conn As New MySqlConnection
Dim connString As String

Dim DataSchnitstelel As MySqlDataAdapter


Public Function verbindungString(ByVal Server As String, ByVal UID As String, ByVal PWD As String, _
                                 ByVal Datenbank As String)
    connString = "server=" & Server & ";uid=" & UID & ";pwd=" & PWD & ";database=" & Datenbank & ";"



    connString = CStr(connString)
End Function



Public Sub Open()
    conn.ConnectionString = connString
    Try
        conn.Open()
        MsgBox(connString)
    Catch ex As Exception
        MessageBox.Show(ex.Message)
    End Try
End Sub



Public Function Close()
    If conn.State = ConnectionState.Open Then
        Try
            conn.Close()
            MessageBox.Show("Closed!")
        Catch ex As Exception
            MessageBox.Show("Something Wrong" & ex.Message)
        End Try
    Else
        MessageBox.Show("Verbindung bereitsgeschlossen")
    End If
End Function


Public Function UpdateStatus()
    Dim Klank As Boolean
    If conn.State = 1 Then
        Klank = True
    End If
    If conn.State = 0 Then
        Klank = False
    End If
    Return Klank
End Function

Public Function SQLSelect()

End Function

Конечный класс

Во второй форме я подключаюсь к БД. Соединение открывается успешно, но оно не открывается в первой форме: (

Что не так?

Ответы [ 2 ]

0 голосов
/ 07 ноября 2011

Полагаю, проблема в том, что вы где-то используете обе формы

Dim bla as New DBConn

Вместо этого вы можете использовать шаблон Singleton.Добавьте следующий код в ваш класс DBConn:

'Make Constructor Private to disallow creating an Instance from somewhere else
Private Sub New()
End Sub

'Variable to share the only created instance
Private Shared _Instance As DBConn

'Function to get access to the only instance
Public Shared ReadOnly Property Instance() As DBConn
  Get
    If _Instance Is Nothing Then
      _Instance = New DBConn
    End If
    Return _Instance
  End Get
End Property

После этих изменений вам необходимо «исправить» одну строку в каждой форме следующим образом:

Dim bla as DBConn = DBConn.Instance

Это должно гарантировать, чтообе формы запрашивают экземпляр, и только в первый раз создается экземпляр.Все последующие запросы получают тот же экземпляр.

Еще одна вещь: если у вас есть 'WithEvents' или какой-либо EventHandling, связанный с этим синглтоном, то убедитесь, что для переменной DBConn ничего не установлено, когда вы закрываете / удаляете форму1.Но согласно вашему коду это не имеет значения.

0 голосов
/ 07 ноября 2011

Если вы объявляете класс соединения в каждой из ваших форм как Dim someName as new DBConn, ваша проблема очевидна: они не знают о существовании друг друга. Если у вас есть модуль помимо ваших форм, в котором вы объявляете экземпляр DBConn как Friend, он будет известен всем формам

...