Share via


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 4.0 mediante el proveedor OLE DB para SQL Server Compact 4.0. 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 solo lectura de la base de datos.

DB_MODE_WRITE

Permite abrir una copia de solo 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 a través de un recurso de red compartido solo 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 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.

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