Hinzufügen von Binärdaten zu einer Tabelle mithilfe von SQL
Binärdaten können mit den SQL-Abfragen INSERT INTO oder UPDATE nicht direkt in eine Tabelle eingefügt werden. Um Binärdaten zu einer Tabelle hinzuzufügen, müssen Sie zuerst den Parametermarker (?) in der Abfrage als Platzhalter für den binären Wert verwenden. Die Ausführung der Abfrage muss einen Datensatz enthalten, der die Binärdaten in einem seiner Felder enthält.
Ein Marker ist ein Parameterverweis auf einen Wert, der von einem Datensatz bereitgestellt wird, der mit der Abfrage übermittelt wird. Er wird in der SQL-Anweisung durch ein Fragezeichen (?) dargestellt.
Der folgende Beispielcode fügt Binärdaten zu einer Tabelle hinzu.
#include <windows.h>
#include <Msiquery.h>
#include <tchar.h>
#pragma comment(lib, "msi.lib")
int main()
{
PMSIHANDLE hDatabase = 0;
PMSIHANDLE hView = 0;
PMSIHANDLE hRec = 0;
if (ERROR_SUCCESS == MsiOpenDatabase(_T("c:\\temp\\testdb.msi"), MSIDBOPEN_TRANSACT, &hDatabase))
{
//
// Open view on Binary table so that we can add a new row, must use '?' to represent Binary data
//
if (ERROR_SUCCESS == MsiDatabaseOpenView(hDatabase, _T("INSERT INTO `Binary` (`Name`, `Data`) VALUES ('NewBlob', ?)"), &hView))
{
//
// Create record with binary data in 1st field (must match up with '?' in query)
//
hRec = MsiCreateRecord(1);
if (ERROR_SUCCESS == MsiRecordSetStream(hRec, 1, _T("c:\\temp\\data.bin")))
{
//
// Execute view with record containing binary data value; commit database to save changes
//
if (ERROR_SUCCESS == MsiViewExecute(hView, hRec)
&& ERROR_SUCCESS == MsiViewClose(hView)
&& ERROR_SUCCESS == MsiDatabaseCommit(hDatabase))
{
//
// New binary data successfully committed to the database
//
}
}
}
}
return 0;
}
Das folgende Beispielskript fügt Binärdaten zu einer Tabelle hinzu.
Dim Installer
Dim Database
Dim View
Dim Record
Set Installer = CreateObject("WindowsInstaller.Installer")
Set Record = Installer.CreateRecord(1)
Record.SetStream 1, "c:\temp\data.bin"
Set Database = Installer.OpenDatabase("c:\temp\testdb.msi", msiOpenDatabaseModeTransact)
Set View = Database.OpenView("INSERT INTO `Binary` (`Name`, `Data`) VALUES ('NewBlob', ?)")
View.Execute Record
Database.Commit ' save changes
Zugehörige Themen