Einfügen eines Bilds aus einer Datei (ADO.NET)
Aktualisiert: November 2007
Je nach Feldtyp in der Datenquelle können Sie ein Binary Large Object (BLOB) entweder als Binär- oder Zeichendaten in eine Datenbank schreiben. "BLOB" ist ein allgemeiner Begriff, der sich auf die Datentypen text, ntext und image bezieht, die in der Regel Dokumente und Bilder enthalten.
Um einen BLOB-Wert in die Datenbank zu schreiben, geben Sie die entsprechende INSERT- oder UPDATE-Anweisung aus, und übergeben Sie den BLOB-Wert als Eingabeparameter (weitere Informationen finden Sie unter Konfigurieren von Parametern und Parameterdatentypen (ADO.NET)). Wenn das BLOB als Text gespeichert ist (z. B. ein SQL Server-Feld vom Typ text), können Sie das BLOB als Zeichenfolgenparameter übergeben. Wenn das BLOB im Binärformat gespeichert ist (z. B. ein SQL Server-Feld vom Typ image), können Sie ein Array vom Typ byte als Binärparameter übergeben.
Beispiel
Im folgenden Codebeispiel werden der Tabelle Employees in der Northwind-Datenbank Mitarbeiterinformationen hinzugefügt. Ein Foto des Mitarbeiters wird aus einer Datei geladen und dem Photo-Feld der Tabelle, einem Bildfeld, hinzugefügt.
Public Shared Sub AddEmployee( _
lastName As String, _
firstName As String, _
title As String, _
hireDate As DateTime, _
reportsTo As Integer, _
photoFilePath As String, _
connectionString As String)
Dim photo() as Byte = GetPhoto(photoFilePath)
Using connection As SqlConnection = New SqlConnection( _
connectionString)
Dim command As SqlCommand = New SqlCommand( _
"INSERT INTO Employees (LastName, FirstName, Title, " & _
"HireDate, ReportsTo, Photo) " & _
"Values(@LastName, @FirstName, @Title, " & _
"@HireDate, @ReportsTo, @Photo)", connection)
command.Parameters.Add("@LastName", _
SqlDbType.NVarChar, 20).Value = lastName
command.Parameters.Add("@FirstName", _
SqlDbType.NVarChar, 10).Value = firstName
command.Parameters.Add("@Title", _
SqlDbType.NVarChar, 30).Value = title
command.Parameters.Add("@HireDate", _
SqlDbType.DateTime).Value = hireDate
command.Parameters.Add("@ReportsTo", _
SqlDbType.Int).Value = reportsTo
command.Parameters.Add("@Photo", _
SqlDbType.Image, photo.Length).Value = photo
connection.Open()
command.ExecuteNonQuery()
End Using
End Sub
Public Shared Function GetPhoto(filePath As String) As Byte()
Dim stream As FileStream = new FileStream( _
filePath, FileMode.Open, FileAccess.Read)
Dim reader As BinaryReader = new BinaryReader(stream)
Dim photo() As Byte = reader.ReadBytes(stream.Length)
reader.Close()
stream.Close()
Return photo
End Function
public static void AddEmployee(
string lastName,
string firstName,
string title,
DateTime hireDate,
int reportsTo,
string photoFilePath,
string connectionString)
{
byte[] photo = GetPhoto(photoFilePath);
using (SqlConnection connection = new SqlConnection(
connectionString))
SqlCommand command = new SqlCommand(
"INSERT INTO Employees (LastName, FirstName, " +
"Title, HireDate, ReportsTo, Photo) " +
"Values(@LastName, @FirstName, @Title, " +
"@HireDate, @ReportsTo, @Photo)", connection);
command.Parameters.Add("@LastName",
SqlDbType.NVarChar, 20).Value = lastName;
command.Parameters.Add("@FirstName",
SqlDbType.NVarChar, 10).Value = firstName;
command.Parameters.Add("@Title",
SqlDbType.NVarChar, 30).Value = title;
command.Parameters.Add("@HireDate",
SqlDbType.DateTime).Value = hireDate;
command.Parameters.Add("@ReportsTo",
SqlDbType.Int).Value = reportsTo;
command.Parameters.Add("@Photo",
SqlDbType.Image, photo.Length).Value = photo;
connection.Open();
command.ExecuteNonQuery();
}
}
public static byte[] GetPhoto(string filePath)
{
FileStream stream = new FileStream(
filePath, FileMode.Open, FileAccess.Read);
BinaryReader reader = new BinaryReader(stream);
byte[] photo = reader.ReadBytes((int)stream.Length);
reader.Close();
stream.Close();
return photo;
}
Siehe auch
Konzepte
Abrufen von umfangreichen Daten (ADO.NET)
SQL Server-Datentypmappings (ADO.NET)
Weitere Ressourcen
Verwenden von Befehlen zum Ändern von Daten (ADO.NET)
Binäre Daten und Daten mit großen Werten in SQL Server (ADO.NET)