Dodawanie danych binarnych do tabeli przy użyciu języka SQL
Nie można wstawić danych binarnych do tabeli bezpośrednio przy użyciu zapytań INSERT INTO lub UPDATE SQL. Aby dodać dane binarne do tabeli, musisz najpierw użyć znacznika parametru (?) w zapytaniu jako symbol zastępczy dla wartości binarnej. Wykonanie zapytania powinno zawierać rekord zawierający dane binarne w jednym z jego pól.
Znacznik to odwołanie parametru do wartości dostarczonej przez rekord przesłany za pomocą zapytania. Jest reprezentowana w instrukcji SQL za pomocą znaku zapytania (?).
Poniższy przykładowy kod dodaje dane binarne do tabeli.
#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;
}
Poniższy przykładowy skrypt dodaje dane binarne do tabeli.
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
Tematy pokrewne