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 Microsoft SQL Server Compact 3.5 (SQL Server Compact 3.5), las propiedades de los objetos Session 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 3.5, 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 3.5 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;