Cómo establecer el modo de archivo al abrir una base de datos con OLE DB (mediante programación)
En este tema aprenderá a establecer el modo de archivo al abrir una base de datos de Microsoft SQL Server Compact 3.5 (SQL Server Compact 3.5) mediante el proveedor OLE DB para SQL Server Compact 3.5. Para establecer el modo en que se abre la base de datos, utilice la propiedad DBPROP_INIT_MODE. En la siguiente tabla se definen los valores válidos del modo de archivo:
Valor | Definición |
---|---|
DB_MODE_READ |
Permite abrir una copia de sólo lectura de la base de datos. |
DB_MODE_WRITE |
Permite abrir una copia de sólo escritura de la base de datos. |
DB_MODE_READWRITE |
Permite que varios procesos abran y modifiquen la base de datos. |
DB_MODE_SHARE_DENY_READ |
Impide que los demás abran la base de datos en modo de lectura. |
DB_MODE_SHARE_DENY_WRITE |
Impide que los demás abran la base de datos en modo de escritura. |
DB_MODE_SHARE_EXCLUSIVE |
Impide que los demás abran la base de datos en modo de lectura/escritura (DB_MODE_SHARE_DENY_READ | DB_MODE_SHARE_DENY_WRITE). |
DB_MODE_SHARE_DENY_NONE |
No se puede denegar el acceso de lectura ni de escritura a los demás. |
Nota
Al abrir una base de datos ubicada en un recurso compartido, la única opción disponible es el modo de archivo DB_MODE_SHARE_EXCLUSIVE. La lectura y escritura de una base de datos de SQL Server Compact 3.5 a través de un recurso de red compartido sólo funciona desde un proceso. Dentro de ese único proceso, se pueden abrir varias conexiones. Por ejemplo, una conexión puede realizar una operación Insert y una segunda conexión, una consulta Select. No obstante, dos conexiones independientes no pueden usar SQL Server Compact 3.5 para obtener acceso al mismo archivo .sdf a través de un recurso de red compartido. La segunda conexión recibirá un error de infracción de uso compartido de archivos.
Ejemplo
El siguiente código muestra la forma de establecer el modo de archivo utilizando el proveedor OLE DB de SQL Server Compact 3.5.
DBPROPSET dbpropset[1]; // Property Set used to initialize provider
DBPROP dbprop[2]; // Property array used in property set to initialize provider
VariantInit(&dbprop[0].vValue);
VariantInit(&dbprop[1].vValue);
// Initialize property with name of database
dbprop[0].dwPropertyID = DBPROP_INIT_DATASOURCE;
dbprop[0].dwOptions = DBPROPOPTIONS_REQUIRED;
dbprop[0].vValue.vt = VT_BSTR;
dbprop[0].vValue.bstrVal = SysAllocString(L"MyDB.sdf");
if(NULL == dbprop[0].vValue.bstrVal)
{
hr = E_OUTOFMEMORY;
goto Exit;
}
// Initialize property with open mode for database
dbprop[1].dwPropertyID = DBPROP_INIT_MODE;
dbprop[1].dwOptions = DBPROPOPTIONS_REQUIRED;
dbprop[1].vValue.vt = VT_I4;
dbprop[1].vValue.lVal = DB_MODE_READ;
// Initialize property set
dbpropset[0].guidPropertySet = DBPROPSET_DBINIT;
dbpropset[0].rgProperties = dbprop;
dbpropset[0].cProperties = sizeof(dbprop)/sizeof(dbprop[0]);
// Set properties into the provider's DSO object
hr = pIDBProperties->SetProperties(sizeof(dbpropset)/sizeof(dbpropset[0]), dbpropset);
if(FAILED(hr))
{
goto Exit;
}