BuchEy schrieb:
| Zitat: |  | Gebunden ist das ganze an meine MySQL-Datenbank ohne DataSet
o.ä., weil ich da nicht durchgestiegen bin. |  |
Wie schon mal geschrieben, erst verstehen, dann implementieren.
1. NIEMALS globale Connections benutzen.
2. Du frickels ja doch die Daten in die Controls.
3. Was soll das mit dem Pooling? Du hast wirklich verstanden was das im Connectionstring macht?
4. Du kannst nicht an MySql binden, nur an Auflistungen, in deinem Fall an eine DataTable.
5. NIEMALS,NIEMALS,NIEMALS,NIEMALS auf Internas anderer Klassen zugreifen und schon gar nicht über die Defaultinstanzen.
Als erstes solltest du mal Functionen ( Businesslogik ) von der Oberfläche trennen.
public Class DataAccess
Protected _Connectionstring As String
public sub New(ByVal connectionstring as String)
_Connectionstring = connectionstring
End Sub
Public Function GetDatabases() as DataTable
Return ReadDataTable( "SHOW DATABASES" )
End Function
Public Function GetTables( databaseName as string) as DataTable
ChangeDatabase( databaseName )
Return ReadDataTable( "SHOW TABLES" )
End Function
Public Function ReadTable(tableName as string) as DataTable
Return ReadDataTable( string.Format("SELECT * FROM {0}", tableName) )
End Function
Public Function WriteTable(tableName as string, dt as DataTable)
Using adapter as new MySqlDataAdapter(string.Format("SELECT * FROM {0}", _
tableName), _Connectionstring)
Dim cb as new MySqlCommandBuilder(adapter)
adapter.Update(dt)
End Using
End Function
Public Sub ChangeDatabase(newDatabase as string)
dim csb as new MySqlConnectionstringBuilder(_Connectionstring)
csb.Database = newDatabase
_Connectionstring = csb.ToString()
End Sub
public Function ReadDataTable(sql as string ) as DataTable
Dim dt as new DataTable
Using adapter as new MySqlDataAdapter(sql, _Connectionstring)
adapter.Fill( dt )
End Using
Return dt
End Function
end ClassSo und jetzt ist das was in der UI steht auch einfacher zu ersehen.
Public Class OptionenForm
Inherits System.Windows.Forms.Form
Protected DAL as DataAccess
public sub new()
InitialiseComponents()
Dim Connectionstring as string = String.Format("server={0};user id={1};" & _
"password={2}; database=mysql", tb_server.Text, tb_user.Text, tb_passwd.Text)
DAL = new DataAccess(Connectionstring)
End Sub
Private Sub cmd_connect_Click(ByVal sender As System.Object, ByVal e As _
System.EventArgs) Handles cmd_connect.Click
Try
Dim dt as DataTable = DAL.GetDatabases()
cb_database.DisplayMember = dt.columns(0).ColumnName
cb_database.DataSource = dt
Catch ex As MySqlException
MessageBox.Show("Error connecting to the server: " + ex.Message)
End Try
End Sub
Private Sub cb_database_SelectedIndexChanged(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles cb_database.SelectedIndexChanged
Try
Dim dt as DataTable = DAL.GetTables(cb_database.Text)
cb_tables.DisplayMember = dt.columns(0).ColumnName
cb_tables.DataSource = dt
Catch ex As SqlException
MessageBox.Show("Failed to populate table list: " + ex.Message)
Finally
If Not reader Is Nothing Then reader.Close()
End Try
End Sub
Private Sub cb_tables_SelectedIndexChanged(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles cb_tables.SelectedIndexChanged
DasDataGridView.DataSource = DAL.ReadTable(cb_tables.Text)
End Sub
End Class |