Como definir o modo de arquivo ao abrir um banco de dados com o OLE DB (programaticamente)
Neste tópico, você aprenderá como definir o modo de arquivo ao abrir um banco de dados do Microsoft SQL Server Compact 3.5 com o uso do provedor OLE DB para SQL Server Compact 3.5. Para definir o modo no qual o banco de dados é aberto, use a propriedade DBPROP_INIT_MODE. A tabela a seguir define os valores válidos do modo de arquivo:
Valor |
Definição |
---|---|
DB_MODE_READ |
Permite abrir uma cópia somente leitura do banco de dados. |
DB_MODE_WRITE |
Permite abrir uma cópia somente gravação do banco de dados. |
DB_MODE_READWRITE |
Permite que vários processos abram e modifiquem o banco de dados. |
DB_MODE_SHARE_DENY_READ |
Impede que outras pessoas abram em modo de leitura. |
DB_MODE_SHARE_DENY_WRITE |
Impede que outras pessoas abram em modo de gravação. |
DB_MODE_SHARE_EXCLUSIVE |
Impede que outras pessoas abram no modo de leitura/gravação (DB_MODE_SHARE_DENY_READ | DB_MODE_SHARE_DENY_WRITE). |
DB_MODE_SHARE_DENY_NONE |
Não é possível negar o acesso de leitura ou de gravação a outras pessoas. |
Dica
Ao abrir um banco de dados localizado em um compartilhamento de arquivos, a única opção disponível é o modo de arquivo DB_MODE_SHARE_EXCLUSIVE. A leitura e gravação de um banco de dados do SQL Server Compact 3.5 em um compartilhamento de rede funciona somente a partir de um processo. Nesse processo, várias conexões podem ser abertas. Por exemplo, uma conexão pode executar uma operação Insert e uma segunda conexão pode executar uma consulta de Select. Entretanto, duas conexões separadas não podem usar o SQL Server Compact 3.5 para acessar o mesmo arquivo .sdf em um compartilhamento de rede. A segunda conexão receberá um erro de violação de compartilhamento de arquivo.
Exemplo
O código a seguir mostra como definir o modo de arquivo usando o provedor OLE DB para 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;
}