如何在使用 OLE DB 打开数据库时设置文件模式(以编程方式)
本主题将介绍如何在使用 OLE DB Provider for SQL Server Compact Edition 打开 Microsoft SQL Server 2005 Compact Edition (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 Provider for 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;
}