OLE DB-Sitzungsobjekte (SQL Server Compact)

Das Sitzungsobjekt dient in erster Linie zum Definieren von Transaktionen, Befehlen und Rowsets sowie zum Erstellen und Ändern von Tabellen und Indizes.

Verwenden der Sitzungsobjekte

In Microsoft SQL Server Compact 3.5 (SQL Server Compact 3.5) können Sitzungseigenschaften mithilfe der ISessionProperties-Schnittstelle festgelegt werden.

Eine Sitzung ermöglicht Folgendes:

  • Erstellen Sie ein Befehlsobjekt durch Aufrufen von IDBCreateCommand::CreateCommand. Mit einer einzigen Sitzung können mehrere Befehle unterstützt werden. Weitere Informationen finden Sie unter OLE DB-Befehle (SQL Server Compact).
  • Erstellen Sie ein Rowset durch Aufrufen von IOpenRowset::OpenRowset. Weitere Informationen finden Sie unter OLE DB-Rowsets (SQL Server Compact).
  • Erstellen Sie ein Schemarowset durch Aufrufen von IDBSchemaRowset::GetRowset. Weitere Informationen zu den von SQL Server Compact 3.5 unterstützten Schemarowsets finden Sie unter OLE DB-Schemarowsets (SQL Server Compact).
  • Erstellen oder Ändern Sie Tabellen und Indizes mithilfe von ITableDefinition und IIndexDefinition.
  • Starten und Beenden von Transaktionen.

Anbieterspezifische Sitzungseigenschaften

SQL Server Compact 3.5 unterstützt die anbieterspezifische DBPROP_SSCE_ TRANSACTION_COMMIT_MODE-Eigenschaft. Mit dieser Eigenschaft wird angegeben, ob das Modul den Pufferpool nach dem Commit leeren soll. Um diesen Wert zu ändern, übergeben Sie DBPROP_SSCE_ TRANSACTION_COMMIT_MODE im DBPROPSET_SSCE_SESSION-Eigenschaftensatz an die ISessionProperties-Schnittstelle. Weitere Informationen finden Sie unter Anbieterspezifische Eigenschaften (OLE DB).

Das folgende Beispiel zeigt, wie ein Sitzungsobjekt erstellt und die Sitzungseigenschaften geändert werden, um zu erreichen, dass das Datenbankmodul den Pufferpool nach dem Commit leert.

Beispiel

   // Object declarations
HRESULT                  hr=S_OK;
ULONG                    i                    = 0;
DBPROPSET                dbpropset[2];
DBPROP                   dbprop[1];
DBPROP                   sscedbprop[1];

// Declare the provider interfaces.

IDBInitialize *          pIDBInitialize       = NULL;
IDBProperties *          pIDBProperties       = NULL;
IDBCreateSession *       pIDBCreateSession    = NULL;
ISessionProperties *     pISessionProperties  = NULL;
// Initialize the the data source object.
hr = CoCreateInstance(CLSID_SQLSERVERCE, NULL, CLSCTX_INPROC_SERVER, 
        IID_IDBInitialize, (LPVOID *) &pIDBInitialize);
if (FAILED(hr))
{
    //Send an error-specific message and do error handling.
    goto Exit;
}
// Initialize the the property variants.
for (i = 0; i < sizeof(dbprop)/sizeof(dbprop[0]); i++)
{
    VariantInit(&dbprop[i].vValue);
}
for (i = 0; i < sizeof(sscedbprop)/sizeof(sscedbprop[0]); i++)
{
    VariantInit(&sscedbprop[i].vValue);
}
dbprop[0].dwPropertyID   = DBPROP_INIT_DATASOURCE;
dbprop[0].dwOptions = DBPROPOPTIONS_REQUIRED;
dbprop[0].vValue.vt = VT_BSTR;
dbprop[0].vValue.bstrVal = SysAllocString(L"\\windows\\Northwind.sdf");
if(NULL == dbprop[0].vValue.bstrVal)
{
    hr = E_OUTOFMEMORY;
    goto Exit; 
}
dbpropset[0].rgProperties    = dbprop;
dbpropset[0].cProperties     = sizeof(dbprop)/sizeof(dbprop[0]);
dbpropset[0].guidPropertySet = DBPROPSET_DBINIT;
// Initialize the property to change the maximum buffer pool size.
sscedbprop[0].dwPropertyID = DBPROP_SSCE_MAXBUFFERSIZE;
sscedbprop[0].dwOptions = DBPROPOPTIONS_REQUIRED;
sscedbprop[0].vValue.vt = VT_I4;
sscedbprop[0].vValue.lVal = 20*1024; //limit cache usage to 20M, default is 640K
dbpropset[1].rgProperties    = sscedbprop;
dbpropset[1].cProperties     = sizeof(sscedbprop)/sizeof(sscedbprop[0]);
dbpropset[1].guidPropertySet = DBPROPSET_SSCE_DBINIT;
// Set the properties into the provider's data source object.
hr = pIDBInitialize->QueryInterface(IID_IDBProperties,(void**)&pIDBProperties);
if(FAILED(hr))
{
    goto Exit;
}
hr = pIDBProperties->SetProperties(sizeof(dbpropset)/sizeof(dbpropset[0]), 
    dbpropset);
if(FAILED(hr))
{
    goto Exit;
}
// Initialize the data source.
hr = pIDBInitialize->Initialize();
if(FAILED(hr))
{
   goto Exit;
}
// Initialize a session object.
hr = pIDBProperties->QueryInterface(IID_IDBCreateSession, (void **) &pIDBCreateSession);
if (FAILED(hr))
{
    //Send an error-specific message and do error handling.
    goto Exit;
}
hr = pIDBCreateSession->CreateSession(NULL, IID_ISessionProperties, 
    (IUnknown**) &pISessionProperties);
Exit:
    // Clean up resources
    return hr;