none
DB-Operation hängt nach ... in Access

    Frage

  • Hallo Experten,

    ich erstelle ein komplexes Bild per Code auf der Festplatte. Dieses wird dann von der Festplatte mit folgenden Code in eine Access-DB geschrieben.

    Dim oConn As OleDb.OleDbConnection
            Dim oComm As OleDb.OleDbCommand
    
            Dim Err As String
            Dim sInsertQuery As String
            Dim FSO As New System.IO.FileStream(tempPfad & "\msttemp.bmp", IO.FileMode.Open, IO.FileAccess.Read)
            Try
                sInsertQuery = "insert into images([image]) VALUES(?)"
                sInsertQuery = "update prgopt set WertOLE= ? WHERE Bereich1='Programm' AND Bereich2='CCF-MST-Bild' AND Bereich3='Bild'"
                oConn = New OleDb.OleDbConnection(My.Settings.DefaultConnectionString)
                oConn.Open()
                oComm = New OleDb.OleDbCommand(sInsertQuery, oConn)
                Dim imgArrayByte(CType(FSO.Length() - 1, Integer)) As Byte
                FSO.Read(imgArrayByte, 0, imgArrayByte.Length)
                FSO.Close()
    
                Dim QueryParameter As New OleDb.OleDbParameter("@Picture", _
                                                               OleDb.OleDbType.LongVarBinary, _
                                                               imgArrayByte.Length, ParameterDirection.Input, _
                                                               False, 0, 0, Nothing, DataRowVersion.Current, _
                                                               imgArrayByte)
                oComm.Parameters.Add(QueryParameter)
                oComm.ExecuteNonQuery()
               
                ' MsgBox("Bild wurde in der Datenbank erfolgreich gespeichert", MsgBoxStyle.OkOnly, "Erfolgreich gespeichert")
    
            Catch Ex As Exception
                Err = Ex.Message
                MsgBox("Fehler : " & Err, MsgBoxStyle.OkOnly, "Fehler aufgetreten")
            Finally
                oConn = Nothing
                oComm = Nothing
            End Try

    Das funzt soweit einwandfrei ... nur jetzt kommt es ... unmittelbar nach dem Code wird das Bild aus der DB ausgelesen und in einen Seriendruck eingebunden. Nur leider ist da dann kein Bild zu sehen! Schau ich nun in die DB ist das Bild(OLE) aber vorhanden. Bau ich nun im Code eine Pause (z.B. Msgbox -> siehe Code) von ca 3-5 sec ein, ist das Bild da. Eine andere Möglichkeit ist den Befehl oComm.ExecuteNonQuery() 2x direkt hintereinander auszuführen, auch dann ist das Bild dann da. Aber, das kann es ja nicht sein oder ? Wie kann ich sicherstellen, das die DB-Oberation ausgeführt wurde und die Daten auch in der DB zur Verfügung stehen ????

    mfg eem monarch

    Sonntag, 17. März 2013 13:03

Antworten

  • Hallo Monarch,

    du solltest die Verbindung schließen... nur tut das ein (überflüssiges) oConn = Nothing nicht.

    Dein Code etwas eingedampft:

            Dim imageData = System.IO.File.ReadAllBytes(Path.Combine(temppfad, "mstemp.bmp"))
            Try
                Using connection As New OleDbConnection(My.Settings.DefaultConnectionString)
                    connection.Open()
                    Dim sInsertQuery = "insert into images([image]) VALUES(?)"
                    'sInsertQuery = "update prgopt set WertOLE= ? WHERE Bereich1='Programm' AND Bereich2='CCF-MST-Bild' AND Bereich3='Bild'"
    
                    Using command As New OleDbCommand(sInsertQuery, connection)
                        command.Parameters.Add("@Picture", OleDbType.LongVarBinary, imageData.Length).Value = imageData
                        command.ExecuteNonQuery()
                    End Using
                End Using
    
                ' MsgBox("Bild wurde in der Datenbank erfolgreich gespeichert", MsgBoxStyle.OkOnly, "Erfolgreich gespeichert")
    
            Catch Ex As Exception
                MessageBox.Show("Fehler : " & Ex.Message, "Fehler aufgetreten")
            End Try
    
    Gruß Elmar
    Sonntag, 17. März 2013 13:56
    Beantworter

Alle Antworten

  • Hallo Monarch,

    du solltest die Verbindung schließen... nur tut das ein (überflüssiges) oConn = Nothing nicht.

    Dein Code etwas eingedampft:

            Dim imageData = System.IO.File.ReadAllBytes(Path.Combine(temppfad, "mstemp.bmp"))
            Try
                Using connection As New OleDbConnection(My.Settings.DefaultConnectionString)
                    connection.Open()
                    Dim sInsertQuery = "insert into images([image]) VALUES(?)"
                    'sInsertQuery = "update prgopt set WertOLE= ? WHERE Bereich1='Programm' AND Bereich2='CCF-MST-Bild' AND Bereich3='Bild'"
    
                    Using command As New OleDbCommand(sInsertQuery, connection)
                        command.Parameters.Add("@Picture", OleDbType.LongVarBinary, imageData.Length).Value = imageData
                        command.ExecuteNonQuery()
                    End Using
                End Using
    
                ' MsgBox("Bild wurde in der Datenbank erfolgreich gespeichert", MsgBoxStyle.OkOnly, "Erfolgreich gespeichert")
    
            Catch Ex As Exception
                MessageBox.Show("Fehler : " & Ex.Message, "Fehler aufgetreten")
            End Try
    
    Gruß Elmar
    Sonntag, 17. März 2013 13:56
    Beantworter
  • Hallo monarch,

    Wenn Dir die Antwort von Elmar geholfen hat, dann bitte markiere diese als Antwort.

    Gruss,

    Ionut

    Dienstag, 26. März 2013 13:44
    Besitzer
  • Hallo Monarch,

    Ich gehe davon aus, dass die Antwort Dir weitergeholfen hat.
    Wenn nicht, neue Rückfragen oder Ergänzungen zu diesem Thread bleiben weiterhin möglich.

    Danke und viele Grüße,
    Ionut

    Donnerstag, 28. März 2013 14:00
    Besitzer