Announcement

Collapse
No announcement yet.

Worddokument in SQLServerdatenbank abspeichern

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

  • Worddokument in SQLServerdatenbank abspeichern

    Hallo,
    <br>
    <br>ich stehe mir mal wieder kräftig im Weg.
    <br>Das Schreiben und Lesen von Bildern in eine Tabelle ist kein Problem. Nun muss ich eine Worddatei in einer SQLServer-Tabelle abspeichern und wieder auslesen und lege mir mit VB.Net dabei die Karten.
    <br>Als Datentyp habe ich mich für Text entschieden. Es wird auch etwas eingefügt, aber mit dem Auslesen will es nicht klappen.
    <br>Vielleicht hat ja jemand einen kleinen Denkanstoss für mich.
    <br>
    <br>Torsten

  • #2
    Hallo,

    wenn der binäre Dateiinhalt einer DOC-Datei in der MS SQL Server-Datenbank abgelegt werden soll, ist der Datentyp <b>IMAGE</b> die erste Wahl:
    <pre>
    USE tempdb
    GO
    CREATE TABLE BLOBTEST (
    blob_id INTEGER NOT NULL IDENTITY PRIMARY KEY,
    recver TIMESTAMP,
    textinhalt TEXT,
    blob IMAGE)
    GO
    </pre>
    Eine SqlCommand-Instanz führt dann eine parametisierte INSERT-Anweisung aus, um den binären Dateiinhalt über eine FileStream-Instanz in die Datenbank zu schreiben:
    <pre>
    ' Dateiinhalt in die MS SQL Server-Datenbank tempdb schreiben
    Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click
    ' Schritt 1: DOC-Inhalt einlesen
    Dim aFS As New System.IO.FileStream("C:\Temp\NET.doc", System.IO.FileMode.Open, System.IO.FileAccess.Read)
    Dim aData(Convert.ToInt32(aFS.Length)) As Byte
    Try
    aFS.Read(aData, 0, Convert.ToInt32(aFS.Length))
    Finally
    aFS.Close()
    End Try
    ' Schritt 2: SqlCommand-Objekt initialisieren
    Dim aBLObInsertCmd As New SqlClient.SqlCommand()
    With aBLObInsertCmd
    .CommandText = "INSERT INTO BLOBTEST(blob) VALUES (@blob)"
    .Connection = Me.SqlConnectionTEMPDB
    .Parameters.Add(New SqlClient.SqlParameter("@blob", SqlDbType.VarBinary, 2147483647, "blob"))
    .Parameters(0).Value = aData
    End With
    Try
    ' Schritt 3: Datensatz einfügen
    SqlConnectionTEMPDB.Open()
    aBLObInsertCmd.ExecuteNonQuery()
    Finally
    SqlConnectionTEMPDB.Close()
    End Try
    End Sub
    </pre>
    Der Rückweg - also das Auslesen aus der Datenbank und das Abspeichern als Datei erfolgt dann analog:
    <pre>
    ' BLOb-Daten aus der MS SQL Server-Datenbank tempdb auslesen und als Datei speichern
    Private Sub Button5_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button5.Click
    Dim aData As Byte()
    Dim aBLObSelectCmd As New SqlClient.SqlCommand()
    With aBLObSelectCmd
    .CommandText = "SELECT blob FROM BLOBTEST WHERE (blob_id = @blob_Id)"
    .Connection = Me.SqlConnectionTEMPDB
    .Parameters.Add(New SqlClient.SqlParameter("@blob_Id", SqlDbType.Int, 4, "blob_id"))
    .Parameters(0).Value = 1
    End With
    Try
    ' Schritt 1: DOC-Inhalt als BLOb aus der Datenbank auslesen
    SqlConnectionTEMPDB.Open()
    aData = DirectCast(aBLObSelectCmd.ExecuteScalar, Byte())
    Finally
    SqlConnectionTEMPDB.Close()
    End Try
    ' Schritt 2: BLOb-Inhalt als Byte-Array in eine Datei schreiben
    Dim iBLObSize As Integer = aData.Length
    Dim aFS As New System.IO.FileStream("C:\Temp\NETExport.doc", System.IO.FileMode.OpenOrCreate, System.IO.FileAccess.Write)
    Try
    aFS.Write(aData, 0, iBLObSize)
    Finally
    aFS.Close()
    aFS = Nothing
    End Try
    End Sub
    </pre&gt

    Comment


    • #3
      Hallo,
      <br>
      <br>Vielen Dank für die schnelle Hilfe, es hat hervorragend funktioniert und hat mir auch gezeigt wo ich mich verrannt habe.
      <br>Wollte ich doch in einem MemoryStream schreiben um den Weg über die Festplatte zu umgehen und die Datei sofort an eien RichBox weiterreichen.
      <br>
      <br>Torste

      Comment

      Working...
      X