Partager via


Objets de session OLE DB (SQL Server Compact)

La principale fonction de l'objet de session est de définir des transactions, des commandes et des ensembles de lignes, ainsi que de créer et de modifier des tables et des index.

Utilisation des objets de session

Dans Microsoft SQL Server Compact 4.0, vous pouvez définir les propriétés de session à l'aide de l'interface ISessionProperties .

À partir d'une session, vous pouvez effectuer les opérations suivantes :

  • Créer un objet de commande en appelant IDBCreateCommand::CreateCommand. Une même session peut prendre en charge plusieurs commandes. Pour plus d'informations, consultez Commandes OLE DB (SQL Server Compact).

  • Créer un ensemble de lignes en appelant IOpenRowset::OpenRowset. Pour plus d'informations, consultez Ensembles de lignes OLE DB (SQL Server Compact).

  • Créer un ensemble de lignes de schéma en appelant IDBSchemaRowset::GetRowset. Pour plus d'informations sur les ensembles de lignes de schéma pris en charge par SQL Server Compact 4.0, consultez Ensembles de lignes de schéma OLE DB (SQL Server Compact).

  • Créer ou modifier des tables et des index à l'aide de ITableDefinition et de IIndexDefinition.

  • commencer et terminer des transactions.

Propriétés de session spécifiques au fournisseur

SQL Server Compact 4.0 prend en charge la propriété DBPROP_SSCE_TRANSACTION_COMMIT_MODE spécifique au fournisseur. Cette propriété est utilisée pour spécifier si le moteur doit vider le pool de mémoires tampons après validation. Pour modifier cette valeur, transmettez DBPROP_SSCE_TRANSACTION_COMMIT_MODE dans le jeu de propriétés DBPROPSET_SSCE_SESSION à l'interface ISessionProperties. Pour plus d'informations, consultez Propriétés spécifiques au fournisseur (OLE DB).

L'exemple suivant indique comment créer un objet de session et modifier les propriétés de la session de sorte que le moteur de bases de données vide le pool de mémoires tampons après validation.

Exemple

   // 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;