vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
TOP-Angebot: 17 bzw. 24 Entwickler-Vollversionen zum unschlagbaren Preis!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2025
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

ADO.NET / Datenbanken
Mit ODBCDataReader ein Blob Feld auslesen 
Autor: Sj
Datum: 04.08.08 08:47

Hallo alle zusammen,
beim folgeden Problem versuche ich mit dem ODBCDataReader ein Blob-Feld aus einer Sybase SQL Anywhere (5) Datenbank auszulesen und als Datei zu speichern. Das folgedende Beispiel liefert mir immer 0-Byte Dateien.
Ich habe schon versuche die Dateien als Strings auszulesen (was auch funktioniert), diese zurückzuwandeln zu Bytes und abzuspeichern. Das ist zwar sehr aufwändig und langsam, funktioniert aber leider nur bis ca 29kB Dateien. Danach werden die Dateien einfach abgeschnitten.

        Dim pubsConn As OdbcConnection = New OdbcConnection( _
          "DSN=datenbank;Uid=user;Pwd=pass")
        Dim cmd As New OdbcCommand
 
        Dim fs As FileStream
        Dim bw As BinaryWriter
        Dim bufferSize As Integer = 50
        Dim outbyte(bufferSize - 1) As Byte
        Dim retval As Long
        Dim startIndex As Long = 0
        Dim ResultCount As Integer = 0
 
        pubsConn.Open()
        cmd.CommandText = arg
        cmd.Connection = pubsConn
        cmd.CommandType = CommandType.Text
        Dim myReader As OdbcDataReader = cmd.ExecuteReader( _
          CommandBehavior.SequentialAccess)
 
        Do While myReader.Read()
            fs = New FileStream(DocumentsFolder & DocumentID & "." & LTrim(Str( _
              ResultCount)) & "." & Filename & ".pdf", FileMode.OpenOrCreate, _
              FileAccess.Write)
            bw = New BinaryWriter(fs)
 
            startIndex = 0
            retval = myReader.GetBytes(0, startIndex, outbyte, 0, bufferSize)
 
            Do While retval = bufferSize
                bw.Write(outbyte)
                bw.Flush()
                startIndex += bufferSize
                retval = myReader.GetBytes(0, startIndex, outbyte, 0, _
                  bufferSize)
            Loop
 
            If retval > 1 Then
                bw.Write(outbyte, 0, retval - 1)
                bw.Flush()
            End If
 
 
            bw.Close()
            fs.Close()
            ResultCount += 1
        Loop
        myReader.Close()
        pubsConn.Dispose()
Beim Debuggen fällt auf dass die Schleife korrekt durchläuft und auch eine Datei erzeugt wird, die ich auslesen kann - die Zeile retval = myReader.GetBytes(0, startIndex, outbyte, 0, bufferSize) muss im Einzelschritt durchlaufen werden, danach kann man laufen lassen, bis die Schleife durch ist. Lasse ich ohne Haltepunkt laufen, bekomm ich wieder 0-Byte Dateien... Hat einer eine Idee dazu?
alle Nachrichten anzeigenGesamtübersicht  |  Zum Thema  |  Suchen

 ThemaViews  AutorDatum
Mit ODBCDataReader ein Blob Feld auslesen3.569Sj04.08.08 08:47
Re: Mit ODBCDataReader ein Blob Feld auslesen1.059SJ04.08.08 15:24
Re: Mit ODBCDataReader ein Blob Feld auslesen1.175SJ05.08.08 08:50

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

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

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