Announcement

Collapse
No announcement yet.

Images in der DB speichern

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Images in der DB speichern

    Hallo Entwickler-Gemeinde,

    kann mir von euch zufälligerweise jemand sagen, wie ich unter VB.NET 2003 Images in der Datenbank speichern kann?
    Vielen Dank schon mal im Voraus.

    mfg
    Andy

  • #2
    Hallo,

    das folgende Beispiel einer ASP.NET-Anwendung demonstriert, wie man eine Grafik in eine MS SQL Server-Datenbank bekommt.

    Schritt 1: Vorbereitung in der MS SQL Server 2000-Datenbank <i>tempdb</i>

    <pre>
    USE tempdb
    GO
    CREATE TABLE OSPICTURES (
    RecID INTEGER NOT NULL IDENTITY PRIMARY KEY,
    Remark VARCHAR(20) NOT NULL,
    JPG IMAGE NOT NULL)
    GO
    </pre>

    Schritt 2: WebForm1.aspx: JPEG-Grafik uploaden und in der Datenbank speichern

    a) < form id="Form1" method="post" runat="server" enctype="multipart/form-data" ><br>
    b) File1 = HTML File Field-Control (System.Web.UI.HtmlControls.HtmlInputFile); Run As Server Control <br>
    c) System.Web.UI.WebControls.Button löst das Uploaden aus

    <pre>
    Private Const cCS As String = "data source=localhost;initial catalog=tempdb;uid=sa;pwd=sa"
    Private Const cSQL As String = "INSERT INTO OSPICTURES (Remark,JPG) VALUES (@Remark,@JPG)"
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    Dim iLen As Integer = Me.File1.PostedFile.ContentLength
    Dim aData(iLen) As Byte
    Me.File1.PostedFile.InputStream.Read(aData, 0, iLen)
    Dim aCon As New SqlConnection(cCS)
    aCon.Open()
    Try
    Dim aCmd As New SqlCommand(cSQL, aCon)
    With aCmd
    .Parameters.Add("@Remark", Me.TextBoxComment.Text)
    .Parameters.Add("@JPG", aData)
    .ExecuteNonQuery()
    End With
    Finally
    aCon.Close()
    End Try
    Me.Response.Redirect("WebForm2.aspx")
    End Sub
    </pre>

    Alternativ dazu kann man auch den Grafikinhalt über den folgenden Weg in das Byte-Array laden, um dieses Byte-Array dann als Parameter an SqlCommand zu übergeben:

    <pre>
    ' ausgewählten Datei-Inhalt in ein Byte-Array einlesen
    Dim aFS As New FileStream(TextBoxIN.Text, FileMode.Open, FileAccess.Read)
    Dim aData(Convert.ToInt32(aFS.Length)) As Byte
    aFS.Read(aData, 0, Convert.ToInt32(aFS.Length))
    aFS.Close()
    </pre&gt

    Comment


    • #3
      Vielen Dank Herr Kosch für die schnelle Hilfe. Dieses Beispiel funktioniert auch sehr gut. Das Problem ist nur, dass ich mit einer Oracle Datenbank arbeite und da gibt es den Datentyp Image nicht. Wissen Sie vielleicht noch eine allgemeingültige vorgehensweise für Datenbanken, in der ich das Image vielleicht in einem Blob speichern könnte, da der Datentyp Blob in fast jeder DB dieser Erde vorhanden ist.

      mfg
      And

      Comment


      • #4
        Hallo,

        in ADO.NET werden spezialisierte Zugriffsklassen wie zum Beispiel <i>SqlCommand</i> für den MS SQL Server (MSDE) verwendet. Bei einer ORACLE-Datenbank muss man sich daher zuerst für eine der alternativen Zugriffsklassen entscheiden. Da die Zugriffsklasse die Fähigkeiten der jeweiligen Datenbank "kennt", kann man dort nachsehen, welche Datentypen für BLOb-Daten unterstützt werden. Für ADO.NET werden die BLOb-Daten als generisches Byte-Array betrachtet, so dass dieser Weg automatisch für Alles passt. Je nach der verwendeten Zugriffsklasse muss man dann allerdings den exakten Datenbanktyp beim Deklarieren der Parameter (Eigenschaft <b>Parameters</b> explizit angeben). Im Fall der Zugriffsklasse <b>OleDbCommand</b> würde das zum Beispiel für BLOb-Daten einer ACCESS-Datenbank so aussehen (C#-Beispiel):

        <pre>
        this.oleDbCommandINSERT.Parameters.Add(new System.Data.OleDb.OleDbParameter("Bildinhalt",
        System.Data.OleDb.OleDbType.LongVarBinary, 0, "Bildinhalt"));
        </pre>

        Der Parameter für die BLOb-Daten wird vom Typ <b>LongVarBinary</b> deklariert, weil die MDB-Datenbank dies so fordert

        Comment

        Working...
        X