vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Brandneu! sevEingabe v3.0 - Das Eingabecontrol der Superlative!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück
Rubrik: Datenbanken   |   VB-Versionen: VB2010 - VB201508.06.20
Einspeichern und Auslesen von Fileinhalten als Bytes in ein Datenfeld einer SQL-Tabelle

Es werden Methoden (Funktionen) vorgestellt, mit denen Fileinhalte als Byte-Felder in einer SQL-Tabelle gespeichert und abgerufen werden können.

Autor:   Dietrich HerrmannBewertung:     [ Jetzt bewerten ]Views:  2.173 
ohne HomepageSystem:  Win7, Win8, Win10, Win11kein Beispielprojekt 

Ich wollte gerne einige kürzere Audio-Files in meiner SQL-Tabelle speichern, um sie dann in Projekten leicht abrufen und letztendlich auch abspielen kann. Das Verfahren mittels meiner Funktionen kann auch für andere geeignete File-Inhalte angewandt werden.

Für die genannten Aufgaben veröffentliche ich zwei Funktionen.

1. Das Speichern von Fileinhalten als Byte-Felder im Datenfeld einer SQL-Tabelle
Diese Funktion realisiert das Speichern von einem File-Inhalt als Bytes ins gewünschte Datenfeld der SQL-Tabelle.

Das betreffende Datenfeld muss in der Tabellen-Definition mit dem Datentyp varbinary(MAX) definiert werden.
Die Funktion arbeitet folgendermaßen:
Als Parameter sind zunächst die SQL-Connection anzugeben. Als nächstes ein String für das INSERT eines neuen Datensatzes. Dieser String muss die übliche Definition der Datenfelder und deren zugehöriger Werte enthalten, insbesondere natürlich den Datenfeldnamen für die Bytes-Daten und dessen Wert. Dieser Wert ist in diesem Falle ein File-Inhalt, der in der Funktion als Stream in ein Byte-Feld gelesen wird. Dieses Byte-Feld wird dann mittels SqlCommand über den INSERT-String in die Datentabelle geschrieben (eine Modifikation wäre eventuell nicht INSERT sondern ein UPDATE, wenn vorhandene Datensätze nur ergänzt werden sollen).

Beispiel für INSERT:

Dim insStrAudio As String = "INSERT INTO myTable (Audio) Values(@File)"

Dabei ist myTable der Name der SQL-Tabelle, Audio bspw. der Datenfeldname für die Bytes.
Als zweiter Parameter der Funktion ist der möglichst komplette (Laufwerk, Pfad, Dateiname) Filename des zu speichernden Files anzugeben.

''' <summary>
'''   Funktion zum Speichern von File-Inhalten in Form von Bytes in eine SQL-Tabelle
''' </summary>
''' <param name="connection">die SQL-Connection</param>
''' <param name="theInsStr">der String für das Insert in die Tabelle</param>
''' <param name="theFilePath">der komplette Filename (inkl. Laufwerk u. Pfad)</param>
Public Sub databaseFileToBytes(connection As SqlConnection,
  theInsStr As String, theFilePath As String)
 
  Dim file As Byte()
 
  ' einlesen des Files in Bytes
  Using stream = New FileStream(theFilePath, FileMode.Open, FileAccess.Read)
    Using reader = New BinaryReader(stream)
      file = reader.ReadBytes(stream.Length)
      reader.Dispose()
    End Using
    stream.Dispose()
  End Using
 
  ' speichern des Files als Bytes
  connection.Open()
  Using sqlWrite = New SqlCommand(theInsStr, connection)
    sqlWrite.Parameters.Add("@File", SqlDbType.VarBinary, file.Length).Value = file
    sqlWrite.ExecuteNonQuery()
    sqlWrite.Dispose()
  End Using
  connection.Close()
End Sub

2. Das Auslesen von Bytes aus der SQL-Tabelle und Speichern in ein File
Diese Funktion dient dem Auslesen von in einer SQL-Tabelle gespeicherten Byte-Feldern und dem Speichern in ein entsprechendes File.

Als Parameter zunächst die SQL-Connection angeben. Als nächste Prameter ein SELECT-String zur Auswahl der gewünschten Zeile der Tabelle. Hier wird angegeben, welches Datenfeld die Bytes-Daten enthält und die Bedingung zur Auswahl des Datensatzes mittels WHERE.

Beispiel für SELECT:

Dim selStr As String = "SELECT Audio FROM myTable WHERE myID = " + "'" + myIDValue + "'"

Dabei ist myTable der Name der SQL-Tabelle, Audio bspw. der Datenfeldname der Bytes.
myID ist der Name eines Ident-Feldes über das ein Datensatz eindeutig definiert werden kann und myIDValue ist dann der Wert des Ident-Feldes.
Der dritte Parameter der Funktion muss möglichst den kompletten (Laufwerk, Pfad, Dateiname) Filenamen des zu speichernden Files enthalten.

''' <summary>
'''   Funktion zum Lesen von Bytes-Daten aus einer SQL-Tabelle in ein File
''' </summary>
''' <param name="connection">die SQL-Connection</param>
''' <param name="theSelStr">der Selection-String für die gewünschte Zeile der Tabelle</param>
''' <param name="theFilePath">der komplette Filename (inkl. Laufwerk u. Pfad)</param>
Public Sub databaseBytesToFile(connection As SqlConnection,
  theSelStr As String,
  theFilePath As String)
 
  Dim theIdval As String
  With theSelStr
    theIdval = .Substring(.IndexOf("'") + 1, .Length - .IndexOf("'") - 2)
  End With
  Using sqlQuery = New SqlCommand(theSelStr, connection)
    sqlQuery.Parameters.AddWithValue("@IDval", theIdval)
    connection.Open()
    Using sqlQueryResult = sqlQuery.ExecuteReader()
      If sqlQueryResult IsNot Nothing Then
        sqlQueryResult.Read()
        Dim blob =
          New Byte((sqlQueryResult.GetBytes(0, 0, Nothing, 0, Integer.MaxValue)) - 1) {}
        sqlQueryResult.GetBytes(0, 0, blob, 0, blob.Length)
        Using fs = New FileStream(theFilePath, FileMode.Create, FileAccess.Write)
          fs.Write(blob, 0, blob.Length)
          fs.Dispose()
        End Using
      End If
    End Using
    connection.Close()
    sqlQuery.Dispose()
  End Using
End Sub

(In meinem Falle speichere ich die Audio-Daten in einem temporären File damit ich sie auch abspielen kann.)

Dieser Tipp wurde bereits 2.173 mal aufgerufen.

Voriger Tipp   |   Zufälliger Tipp   |   Nächster Tipp

Über diesen Tipp im Forum diskutieren
Haben Sie Fragen oder Anregungen zu diesem Tipp, können Sie gerne mit anderen darüber in unserem Forum diskutieren.

Neue Diskussion eröffnen

nach obenzurück


Anzeige

Kauftipp Unser Dauerbrenner!Diesen und auch alle anderen Tipps & Tricks finden Sie auch auf unserer aktuellen vb@rchiv  Vol.6

Ein absolutes Muss - Geballtes Wissen aus mehr als 8 Jahren vb@rchiv!
- nahezu alle Tipps & Tricks und Workshops mit Beispielprojekten
- Symbol-Galerie mit mehr als 3.200 Icons im modernen Look
Weitere Infos - 4 Entwickler-Vollversionen (u.a. sevFTP für .NET), Online-Update-Funktion u.v.m.
 
   

Druckansicht Druckansicht Copyright ©2000-2024 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