| |

ADO.NET / DatenbankenDatenbankinhalt in ein Array speichern, Verbindung bleibt offen, DB locked | |  | Autor: Turion87 | Datum: 29.09.11 14:24 |
| Halo zusammen,
ich habe ein kleines Problem bezüglich meiner Art und Weise meine Datenbank auszulesen.
Zum Hintergrund:
Ich programmier eine Oberfläche, welche Daten aus einer DB ausließt und anzeigt. Diesen Daten stehen in einer Access-Datenbank, die ich von einem FTP downloade und dann bearbeite. Anschließend soll die geladene Datenbank mit der lokalen Version (die zur Laufzeit verwendet wird) überschrieben werden und anschließend wieder auf den FTP hochgeladen werden. --> das hier bitte nicht in Frage stellen und ja ich weiß, für Webapplikationen wäre mySQL besser. Werde ich auch beim nächsten mal machen.
Fakten:
ich erstelle in meiner "Load"-Anweisung eine connection zu meiner Datenbank.
Dim con As New ADODB.Connection (Global)
------------- ;Load Anweisung ----------------
dbpath = System.IO.Path.Combine(Application.StartupPath, "Spieler.mdb")
con.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" & "Data Source=" & dbpath
con.Open()
Dann generiere ich während der Laufzeit diverse SQL Statements und lasse diese über eine Funktion ausführen. Diese empfängt das SQL Statement und optional einen Pfad (standarmäßig ist es der Pfad zur lokalen Datenbank)
Das Problem dieser Funktion ist: bei jeder Operation wird eine Connection durch einen Recordset geöffnet, welche sich dann in der "DBname.ldb" niederschlägt.
Hier ist sie
Public Function ReadGame(ByVal strSQL As String, Optional ByVal Pfad As String = "-")
Dim DBTermine As ADODB.Recordset 'Object
Try
If Pfad = "-" Then
Pfad = dbpath
End If
Dim cnn As String
Dim varData As Object
DBTermine = CreateObject("ADODB.Recordset")
cnn = "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & Pfad
DBTermine.Open(strSQL, cnn, 3) ' adOpenStatic = 3 >> Hier ist das Problem. Jeder Aufruf, egal ob Select From oder Insert oder Update.. erzeugt eine neue Connection. Ich könnte auch in jedem Aufruf DBTermine.close und .dispose() anhängen. ABER das sorgt für einen recht großen Zeitaufwand bei vielen Datensätzen...
Dim iNumRows As Integer
iNumRows = DBTermine.RecordCount
iCount = iNumRows
If iCount <> 0 Then
varData = DBTermine.GetRows(iNumRows) >> Diese Zeile ist auch immens wichtig für den Rest meines Codes. Falls es sich um ein "Select" Statement handelt, wird hier der inhalt in ein 2D-Array geschrieben, das muss vorhanden bleiben
Else
ReDim varData(0, 0)
varData(0, 0) = "keine Daten"
End If
Return varData
Catch ex As Exception
' Dim mess As String = ex.ToString
End Try
ende:
End Function
Meine Frage jetzt ist:
1. Wie kann ich es hinbekommen, dass nach irgendwelchen Operationen die Connection zur Datenbank ordentlich geschlossen wird, ohne dass ich zeitliche Einbußen habe. (Vielleicht mit einem Execute Command oder so)
2. Gibt es vielleicht eine andere Möglichkeit eine Access DB auszulesen, Befehle auszuführen und "Select" Statements in 2D arrays zu speichern?
Viele Grüße
Chris [u] [u][u] |  |
 | Sie sind nicht angemeldet! Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.
Einloggen | Neu registrieren |
  |
|
sevISDN 1.0 
Überwachung aller eingehender Anrufe!
Die DLL erkennt alle über die CAPI-Schnittstelle eingehenden Anrufe und teilt Ihnen sogar mit, aus welchem Ortsbereich der Anruf stammt. Weitere Highlights: Online-Rufident, Erkennung der Anrufbehandlung u.v.m. Weitere InfosTipp des Monats sevAniGif (VB/VBA) 
Anzeigen von animierten GIF-Dateien
Ab sofort lassen sich auch unter VB6 und VBA (Access ab Version 2000) animierte GIF-Grafiken anzeigen und abspielen, die entweder lokal auf dem System oder auf einem Webserver gespeichert sind. Weitere Infos
|
|
|
Copyright ©2000-2025 vb@rchiv Dieter Otter Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.
Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel
|
|