Objetos Session de OLE DB (SQL Server Compact)
La función principal del objeto Session es definir transacciones, comandos y conjuntos de filas, así como crear y modificar tablas e índices.
Usar los objetos Session
En MicrosoftSQL Server Compact 4.0, las propiedades de sesión pueden establecerse con la interfaz ISessionProperties.
Desde una sesión, puede:
Crear un objeto Command llamando a IDBCreateCommand::CreateCommand. Un único objeto Session puede admitir varios objetos Command. Para obtener más información, vea Comandos de OLE DB (SQL Server Compact).
Crear un conjunto de filas llamando a IOpenRowset::OpenRowset. Para obtener más información, vea Conjuntos de filas de OLE DB (SQL Server Compact).
Crear un conjunto de filas de esquema llamando a IDBSchemaRowset::GetRowset. Para obtener más información acerca de los conjuntos de filas de esquema admitidos por SQL Server Compact 4.0, vea Conjuntos de filas de esquema de OLE DB (SQL Server Compact).
Crear o modificar tablas e índices mediante ITableDefinition e IIndexDefinition.
Iniciar y finalizar transacciones.
Propiedades de los objetos Session específicas del proveedor
SQL Server Compact 4.0 admite la propiedad específica del proveedor DBPROP_SSCE_TRANSACTION_COMMIT_MODE. Esta propiedad se usa para especificar si el motor debe vaciar el grupo de búferes después de la confirmación. Para cambiar este valor, pase DBPROP_SSCE_TRANSACTION_COMMIT_MODE en el conjunto de propiedades DBPROPSET_SSCE_SESSION a la interfaz ISessionProperties. Para obtener más información, vea Propiedades específicas del proveedor (OLE DB).
El ejemplo siguiente muestra cómo crear un objeto Session y modificar sus propiedades para hacer que el motor de base de datos vacíe el grupo de búferes después de la confirmación.
Ejemplo
// 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;