Как задать файловый режим при открытии базы данных с помощью OLE DB (программным путем)
В этом разделе объясняется, как задать файловый режим при открытии базы данных Microsoft SQL Server 2005 Compact Edition (SQL Server Compact Edition) с помощью поставщика OLE DB для SQL Server Compact Edition. Для настройки файлового режима, в котором будет открыта база данных, используется свойство DBPROP_INIT_MODE. В таблице определены допустимые значения для файлового режима:
Значение | Определение |
---|---|
DB_MODE_READ |
Позволяет открыть копию базы данных, доступную только для чтения |
DB_MODE_WRITE |
Позволяет открыть копию базы данных, доступную только для записи |
DB_MODE_READWRITE |
Разрешает нескольким процессам открывать и изменять базу данных |
DB_MODE_SHARE_DENY_READ |
Запрещает другим процессам открывать базу данных в режиме чтения |
DB_MODE_SHARE_DENY_WRITE |
Запрещает другим процессам открывать базу данных в режиме записи |
DB_MODE_SHARE_EXCLUSIVE |
Запрещает другим процессам открывать базу данных в режиме чтения или записи (DB_MODE_SHARE_DENY_READ | DB_MODE_SHARE_DENY_WRITE) |
DB_MODE_SHARE_DENY_NONE |
Другим процессам не может быть запрещен ни доступ для чтения, ни доступ для записи |
Примечание. |
---|
При открытии базы данных, находящейся в общем сетевом ресурсе, доступен только файловый режим DB_MODE_SHARE_EXCLUSIVE. Чтение и запись базы данных SQL Server Compact Edition при общем сетевом ресурсе возможны только в пределах одного процесса. В рамках этого одного процесса может быть открыто несколько соединений. Например, используя одно соединение можно выполнить операцию Insert и выполнить запрос Select, используя другое соединение. При этом два различных соединения не могут использовать SQL Server Compact Edition для доступа к одному файлу .sdf, используя общий сетевой ресурс. Для второго соединения будет выведена ошибка совместного использования файлов. |
Пример
В приведенном примере кода показан способ настройки файлового режима с помощью поставщика OLE DB для SQL Server Compact Edition.
DBPROPSETdbpropset[1]; // Property Set used to initialize provider
DBPROPdbprop[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;
}