Freigeben über


Vorgehensweise: Festlegen des Dateimodus beim Öffnen einer Datenbank mit OLE DB (programmgesteuert)

In diesem Thema erfahren Sie, wie Sie den Dateimodus beim Öffnen einer Microsoft SQL Server Compact 3.5-Datenbank festlegen, indem Sie den OLE DB-Anbieter für SQL Server Compact 3.5 verwenden. 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.

Hinweis

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 3.5-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 3.5 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 3.5 verwendet.

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