Aggiunta di dati binari a una tabella tramite SQL
I dati binari non possono essere inseriti in una tabella direttamente usando le query INSERT INTO o UPDATE SQL. Per aggiungere dati binari a una tabella, è prima necessario usare il marcatore di parametro (?) nella query come segnaposto per il valore binario. L'esecuzione della query deve includere un record contenente i dati binari in uno dei relativi campi.
Un marcatore è un riferimento di parametro a un valore fornito da un record inviato con la query. È rappresentato nell'istruzione SQL da un punto interrogativo (?).
Il codice di esempio seguente aggiunge dati binari a una tabella.
#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;
}
Lo script di esempio seguente aggiunge dati binari a una tabella.
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
Argomenti correlati