OLE DB を使用してデータベースを開く際にファイル モードを設定する方法 (プログラム)
ここでは、OLE DB Provider for SQL Server Compact 3.5 を使用して、Microsoft SQL Server Compact 3.5 データベースを開くときのファイル モードを設定する方法について学習します。データベースを開くモードを設定するには、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 3.5 データベースの読み書きは、1 つのプロセスからのみ有効であり、このプロセスの中で複数の接続を確立することができます。たとえば、1 つの接続で Insert 操作を実行し、別の接続で Select クエリを実行できます。ただし、2 つの異なる接続では、SQL Server Compact 3.5 からネットワーク共有を介して同じ .sdf ファイルにアクセスすることはできません。アクセスしようとすると、後の接続でファイル共有違反エラーが発生します。
使用例
次のコードは、OLE DB Provider for 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;
}