Freigeben über


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

Arbeiten mit Abfragen

SQL-Syntax

Beispiele für Datenbankabfragen mit SQL und Skript