Hallo zusammen,
ich habe in einer Anwendung Probleme mit der Laufzeit einer SQL Express-Datenbank und würde gerne wissen, was ich da falsch mache.
Ich öffne ca. 15 Tabellen mit jeweils 500.000 und bis zu 1.500.000 Datensätzen. Auf dem Entwicklungs-PC dauert das eine Minute, beim Kunden über 10 Minuten.
Alles, was mit der Datenbank zusammenhängt, habe ich in einer Klasse untergebracht:
Der Ablauf sieht dann so aus:
Alles ist stark verkürzt dargestellt. Das Hauptproblem ist aber das sehr langsame Öffnen und auch der Update, der ebenfalls extrem lange dauert.
Ist mein Konzept falsch? Bin für jeden Tipp dankbar!
Gruß, Schorsch
ich habe in einer Anwendung Probleme mit der Laufzeit einer SQL Express-Datenbank und würde gerne wissen, was ich da falsch mache.
Ich öffne ca. 15 Tabellen mit jeweils 500.000 und bis zu 1.500.000 Datensätzen. Auf dem Entwicklungs-PC dauert das eine Minute, beim Kunden über 10 Minuten.
Alles, was mit der Datenbank zusammenhängt, habe ich in einer Klasse untergebracht:
VB.NET-Quellcode
- Public Class clsDB
- Public strPcCONN As String
- Public sqlCONN As SqlConnection
- Public Shared cmb As New SqlCommandBuilder
- Public cmArtikel As New SqlCommand
- Public daArtikel As New SqlDataAdapter
- Public dsArtikel As New DataSet
- Public dtArtikel As New DataTable
- Public drArtikel As DataRow
- Public Function DB_OPEN() As Boolean
- Try
- strPcCONN = "Server=.\SQLExpress;AttachDbFilename=C:\Users\Public\TESTDB.mdf;Database=TESTDB;Trusted_Connection=Yes;"
- sqlCONN = New SqlConnection(strPcCONN)
- sqlCONN.Open()
- Return True
- Catch ex As Exception
- strPcMESS = "Error OPEN_DB: " & ex.Message & Chr(10) & "Reason: " & Strings.Right(ex.StackTrace, 50)
- MessageBox.Show(strPcMESS, "TESTDB Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
- DB_OPEN = False
- End Try
- End Function
- Public Function tArtikel_Update() As Boolean
- Try
- cmb = New SqlCommandBuilder(daArtikel)
- daArtikel.Update(dtArtikel)
- tArtikel_Update = True
- Catch ex As Exception
- strPcMESS = "Fehler tArtikel_UPDATE: " & ex.Message & Chr(10) & "Grund: " & Strings.Right(ex.StackTrace, 50)
- MessageBox.Show(strPcMESS, Programmfehler", MessageBoxButtons.OK, MessageBoxIcon.Error)
- tZUWE_Update = False
- End Try
- End Function
- End Class
Der Ablauf sieht dann so aus:
VB.NET-Quellcode
- Public cDB As New clsDB
- With cDB
- if .DB_OPEN Then
- strPcSQL = "SELECT * FROM tblArtikel"
- .daArtikel = New SqlClient.SqlDataAdapter(strPcSQL, .sqlCONN)
- .daArtikel.Fill(.dsArtikel, strPcSQL)
- .dtArtikel = .dsArtikel.Tables(strPcSQL)
- .dtArtikel.PrimaryKey = New DataColumn() { .dtArtikel.Columns("ARTNR")}
- For Each .drArtikel In .dtArtikel.Rows
- ' Datensätze werden verändert
- Next
- .tArtikel_Update()
- .daArtikel.Dispose()
- .dtArtikel.Clear()
- end if
- End With
Alles ist stark verkürzt dargestellt. Das Hauptproblem ist aber das sehr langsame Öffnen und auch der Update, der ebenfalls extrem lange dauert.
Ist mein Konzept falsch? Bin für jeden Tipp dankbar!
Gruß, Schorsch