2016-06-18 5 views
2

Ich habe den folgenden Funktionscode:MySqlDataAdapter Select Statement

Call ConnSettings() 
Dim objDs As New DataSet 
Dim Query As String 
Query = "the query" 

Cmd = New MySqlCommand(Query, MysqlConn) 
Dim dAdapter As New MySqlDataAdapter 
dAdapter.SelectCommand = Cmd 

''Dim dAdapter As New MySqlDataAdapter(Query, MysqlConn) 

Try 
    MysqlConn.Open() 
    dAdapter.Fill(objDs) 
    MysqlConn.Close() 
Catch ex As Exception 
    MessageBox.Show(ex.Message) 
Finally 
    MysqlConn.Dispose() 
End Try 

ich bemerkt habe, dass der Code gleichzeitig hohe Funktionalität, wenn ich auch

Dim dAdapter As New MySqlDataAdapter(Query, MysqlConn) 

statt verwenden:

Cmd = New MySqlCommand(Query, MysqlConn) 
Dim dAdapter As New MySqlDataAdapter 
dAdapter.SelectCommand = Cmd 

Offensichtlich würde ich gerne eine einzelne Zeile anstelle von drei verwenden. Ich bin jedoch relativ neu in VB und würde gerne wissen, ob es irgendwelche Probleme damit gibt.

+0

Nein, das ist die übliche Methode, die von einer Menge Code verwendet wird. Unterschiede sind bedeutungslos – Steve

+1

Wenn es funktioniert, funktioniert es. DataAdapter können die Verbindung öffnen und schließen, sodass Sie MysqlConn.Open und MysqlConn.Close nicht benötigen, wenn Sie sie verwenden. – LarsTech

+0

Ich werde eher besorgt sein über Ihre Angewohnheit, stattdessen globale Variablen zu verwenden. ConnSettings sollte eine MySqlConnection zurückgeben, damit Sie sie in eine Using-Anweisung einschließen und den try/finally-Block entfernen können. Auch andere globale Variablen wie der Befehl sind nur eine Quelle von Problemen und haben keine nennenswerten Auswirkungen auf die Leistung oder den Speicher. – Steve

Antwort

0

Lassen Sie uns versuchen, Ihren Code zu verbessern ....

Erste ConnSettings keine globale Verbindungsvariable nicht initialisiert werden, aber eine lokale ein und gibt es

Public Function ConnSettings() As MySqlConnection 
    Dim conn As MySqlConnection 
    conn = new MySqlConnection(yourConnectionStringHere) 
    conn.Open() 
    return conn 
End Function 

den Code nun, dass eine MySqlConnection braucht könnte dieses ConnSettings nennt und in einer Anweisung von Using

objDS = new DataSet() 
Try 
    Using conn = ConnSettings() 
    Using dAdapter = New MySqlDataAdapter(theQuery, conn) 
     dAdapter.Fill(objDs) 
    End Using 
    End Using 
Catch(ex as Exception 
    MessageBox.Show(ex.Message) 
End Try 

Dieser Code setzt die Verbindung zurück in einer using-Anweisung den Rückgabewert setzen. Wenn der Code aus der Using-Anweisung herausfließt, wird die Verbindung geschlossen und entsorgt (wie für den MySqlDataAdapter). Wie Sie sehen können, ist die Finally-Klausel nicht erforderlich und der Try/Catch-Block ist nur vorhanden, weil Sie eine Fehlermeldung ausgeben möchten zu Ihrem Benutzer (während dies eine allgemeine Praxis ist, ist es nicht sinnvoll, Ihren Benutzer in die unbequeme Position zu versetzen, um diese technisch dichten Nachrichten zu verstehen, verwenden Sie besser eine Protokolldatei und empfehlen Sie Ihrem Benutzer, das Protokoll an Sie zu senden)

In diesem Zusammenhang ist auch der Code innerhalb der ConnSettings ein wenig nutzlos. Was Sie wirklich brauchen, ist nur die Verbindungszeichenfolge und Sie können die Erstellung der MySqlConnection direkt in den aufrufenden Code schreiben.