Vorgehensweise: Festlegen des Dateimodus beim Öffnen einer Datenbank mit OLE DB (programmgesteuert)
In diesem Thema erfahren Sie, wie Sie den Dateimodus beim Öffnen einer Datenbank von Microsoft SQL Server 2005 Compact Edition (SQL Server Compact Edition) festlegen. Dazu verwenden Sie den OLE DB-Anbieter für SQL Server Compact Edition. Zum Festlegen des Modus, in dem die Datenbank geöffnet wird, verwenden Sie die DBPROP_INIT_MODE-Eigenschaft. In der folgenden Tabelle finden Sie Definitionen der zulässigen Werte für den Dateimodus:
Wert | Definition |
---|---|
DB_MODE_READ |
Öffnet eine schreibgeschützte Kopie der Datenbank. |
DB_MODE_WRITE |
Öffnet eine lesegeschützte Kopie der Datenbank. |
DB_MODE_READWRITE |
Ermöglicht, dass mehrere Prozesse die Datenbank öffnen und ändern können. |
DB_MODE_SHARE_DENY_READ |
Verhindert, dass andere die Datenbank im Lesemodus öffnen. |
DB_MODE_SHARE_DENY_WRITE |
Verhindert, dass andere die Datenbank im Schreibmodus öffnen. |
DB_MODE_SHARE_EXCLUSIVE |
Verhindert, dass andere die Datenbank im Lese-/Schreibmodus öffnen (DB_MODE_SHARE_DENY_READ | DB_MODE_SHARE_DENY_WRITE). |
DB_MODE_SHARE_DENY_NONE |
Weder der Lese- noch der Schreibzugriff kann anderen verweigert werden. |
![]() |
---|
Wenn Sie eine Datenbank öffnen, die sich auf einer Dateifreigabe befindet, ist der Dateimodus DB_MODE_SHARE_EXCLUSIVE die einzige verfügbare Option. Das Lesen und Schreiben einer SQL Server Compact Edition-Datenbank über eine Netzwerkfreigabe erfolgt nur durch einen Prozess. Innerhalb des einen Prozesses können mehrere Verbindungen geöffnet werden. Beispielsweise kann eine Verbindung einen Insert-Vorgang und eine zweite Verbindung eine Select-Abfrage ausführen. Zwei separate Verbindungen können jedoch nicht SQL Server Compact Edition verwenden, um über eine Netzwerkfreigabe auf dieselbe SDF-Datei zuzugreifen. Die zweite Verbindung erhält einen Fehler wegen Dateifreigabeverletzung. |
Beispiel
Im folgenden Codebeispiel wird gezeigt, wie der Dateimodus festgelegt wird. Dabei wird der OLE DB-Anbieter für SQL Server Compact Edition verwendet.
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;
}