tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
9
ZUGRIFFE
1068
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Beutel2008 Beutel2008 ist offline Mitglied
    Registriert seit
    Jan 2008
    Beiträge
    22
    So nach dem ich jetzt das halbe Internet durchsucht habe und keine ander Lösung finde müsst Ihr mir mal helfen.

    Ich möchte ein Bild Binär in eine MSSQL Datenbank speichern

    Habe das bild per MemoryStream in ein Array gefühlt
    Code :
    1
    2
    3
    4
    5
    
           Dim streamsource As New IO.MemoryStream
            'image in memorystream speichern
            PictureBox.Image.Save(streamsource, ImageFormat.Jpeg)
     
            Dim bytes() As Byte = streamsource.ToArray()

    Nun meine Frage wie muss ich den SQL-String zusammenbauen das ich ihn über Command und DataReader abfeuern kann?

    Code :
    1
    2
    
                Dim command As New OleDbCommand(SqlString, connection)
                Dim Reader As OleDbDataReader = command.ExecuteReader()


    Vielen Dank und Grüße
    Beutel
     
    Juhu es kompiliert liefert es aus!
    http://www.gameshopsoft.de

  2. #2
    M4st3r M4st3r ist offline Mitglied Brokat
    Registriert seit
    Jan 2005
    Ort
    Frankfurt am Main
    Beiträge
    297
    ...ExecuteReader? ExecuteNonQuery eher - Du willst doch ein Insert machen, oder? Wenn ja:

    Du nimmst einfach deine Insert-Query, z.B. so

    Code :
    1
    
    INSERT INTO files (fileID, fileData) VALUES (@fileID, @fileData)

    ...und fügst dann deinem DbCommand-Object die entsprechenden Parameter hinzu. Dabei kannst du den DbParameter fileData direkt mit dem ByteArray füttern und das ganze dann gegen die Datenbank feuern
    Geändert von M4st3r (10.06.09 um 11:48 Uhr)
     
    http://dirkgoldecker.spaces.live.com

    . Microsoft Certified Technology Specialist
    . Microsoft Certified Professional Developer
    |-> Web Applications

  3. #3
    Beutel2008 Beutel2008 ist offline Mitglied
    Registriert seit
    Jan 2008
    Beiträge
    22
    Gut das hatte ich auch schon probiert

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    
    Dim insertsql As String = "INSERT INTO BilderFehler" & _
                 " ([Fehler ID], [BildAsBinary])" & _
                " VALUES (@id,@bild)"
            '
            'Datenbankverbindung
            Dim myconn As OleDbConnection = Me.getConnection("MSSQL")
     
            Try
     
                'OLDB Command
                Dim insertcmd As New OleDbCommand(insertsql, myconn)
                '
                'Parameter zum Oldb Command hinzufügen und Wert zuweisen
                insertcmd.Parameters.Add("@id", OleDbType.Integer).Value = Fehler_ID
                insertcmd.Parameters.Add("@bild", OleDbType.Binary).Value = Puffer
     
                '
                ' Datenbankverbindung öffnen
                myconn.Open()
                '
                'Daten in die Datenbank schreiben
                insertcmd.ExecuteNonQuery()

    So kommt folgende Fehlermeldung: "Die "@id"-Skalarvariable muss deklariert werden."
     
    Juhu es kompiliert liefert es aus!
    http://www.gameshopsoft.de

  4. #4
    Beutel2008 Beutel2008 ist offline Mitglied
    Registriert seit
    Jan 2008
    Beiträge
    22
    So Fehler behoben Man muss anstatt
    Code :
    1
    
    " VALUES (@id,@bild)"
    Code :
    1
    
    " VALUES (?)"
    machen und dann klappt es Aber nächstes Problem

    Code :
    1
    
     insertcmd.Parameters.Add("@P1", OleDbType.Binary).Value = Puffer
    Wobei puffer ein ByteArray ist und es kommt folgende Fehlermeldung:Operandentypkollision: image ist inkompatibel mit text

    Woher weißt der noch das es ein Bild ist es ist doch im Bytearray aufgeschlüsselt?
     
    Juhu es kompiliert liefert es aus!
    http://www.gameshopsoft.de

  5. #5
    M4st3r M4st3r ist offline Mitglied Brokat
    Registriert seit
    Jan 2005
    Ort
    Frankfurt am Main
    Beiträge
    297
    "Der" weiß das nicht, das solltest du wissen. Am besten speicherst du dir den Mime-Type oder die Extension mit von dem was du in die DB schreibst. Das ersparrt dir in der Zukunft einiges an Arbeit...
     
    http://dirkgoldecker.spaces.live.com

    . Microsoft Certified Technology Specialist
    . Microsoft Certified Professional Developer
    |-> Web Applications

  6. #6
    Beutel2008 Beutel2008 ist offline Mitglied
    Registriert seit
    Jan 2008
    Beiträge
    22
    Naja rein Theoretisch ist die Datei doch dann dort in Binäry abgespeichert und ich weiß das es ein JPEG ist und damit kann ich es einfach in eine Picturbox laden. Von daher ist mir die Extension doch egal.

    Aber hast du mal ein Code Beispiel mit dem MIME-Typ das verstehe ich nicht

    Gruß Beutel
     
    Juhu es kompiliert liefert es aus!
    http://www.gameshopsoft.de

  7. #7
    M4st3r M4st3r ist offline Mitglied Brokat
    Registriert seit
    Jan 2005
    Ort
    Frankfurt am Main
    Beiträge
    297
    So lange deine Dateien immer nur Bilder sind und die durch eine PictureBox reinkommen, ists OK. Wenn du aber irgendwann anfängst andere Dateien (doc, xls, etc...) in die gleiche Tabelle zu speichert, hast du schnell die Übersicht verloren.

    Du kannst dir den MimeType anhand der Datei-Extension aus der registry holen. Wie das geht hab ich hier mal aufgeschrieben
     
    http://dirkgoldecker.spaces.live.com

    . Microsoft Certified Technology Specialist
    . Microsoft Certified Professional Developer
    |-> Web Applications

  8. #8
    Beutel2008 Beutel2008 ist offline Mitglied
    Registriert seit
    Jan 2008
    Beiträge
    22
    Okay beantwortet aber immer noch nich mein Problem das er beim Speichern des Bytearrays rummäckert.

    folgende Fehlermeldung:Operandentypkollision: image ist inkompatibel mit text
    wenn man die
    Code :
    1
    
    ExecuteNonQuery
    abfeuert.
     
    Juhu es kompiliert liefert es aus!
    http://www.gameshopsoft.de

  9. #9
    M4st3r M4st3r ist offline Mitglied Brokat
    Registriert seit
    Jan 2005
    Ort
    Frankfurt am Main
    Beiträge
    297
    Das schaut so aus als würdest du das Byte-Array in ein Textfeld in der Tabelle schieben wollen.

    Ist die Tabelle richtig aufgebaut?

    Ich hab keine Ahnung wie das Parametertechnisch mit dem OleDBCommand ausschaut, aber lass doch mal das OleDBType.Binary weg
     
    http://dirkgoldecker.spaces.live.com

    . Microsoft Certified Technology Specialist
    . Microsoft Certified Professional Developer
    |-> Web Applications

  10. #10
    Avatar von Nico Graichen
    Nico Graichen Nico Graichen ist offline aka gemballa
    tutorials.de Moderator
    Registriert seit
    Dec 2003
    Ort
    Pulheim (NRW)
    Beiträge
    3.898
    Blog-Einträge
    34
     
    Grüße Nico
    ----------------------
    Xing
    ----------------------
    Zitat Zitat von Mark Twain (1835-1910)
    Es gibt drei Dinge, die eine Frau aus dem Nichts hervorzaubern kann: einen Hut, einen Salat und einen Ehekrach.
    Zitat Zitat von Mike Wilson - Biographie über Larry Ellison (CEO Oracle)
    The Difference Between God and Larry Ellison: God Doesn't Think He's Larry Ellison

Ähnliche Themen

  1. Bild in einer Datenbank speichern
    Von Code46 im Forum Swing, Java2D/3D, SWT, JFace
    Antworten: 11
    Letzter Beitrag: 12.04.10, 02:29
  2. Bild in Datenbank speichern
    Von Voltex im Forum PHP
    Antworten: 2
    Letzter Beitrag: 26.01.09, 11:00
  3. Bild in Datenbank speichern
    Von willimc im Forum PHP
    Antworten: 3
    Letzter Beitrag: 07.06.08, 06:10
  4. Bild in Datenbank speichern
    Von Raven280438 im Forum PHP
    Antworten: 5
    Letzter Beitrag: 03.04.08, 10:49
  5. Antworten: 1
    Letzter Beitrag: 30.11.04, 11:08