방법: OLE DB를 사용하여 데이터베이스를 열 경우 파일 모드 설정(프로그래밍 방식)

이 항목에서는 SQL Server Compact 4.0용 OLE DB 공급자를 사용하여 Microsoft SQL Server Compact 4.0 데이터베이스를 열 때 파일 모드를 설정하는 방법에 대해 설명합니다. 데이터베이스가 열리는 모드를 설정하려면 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 데이터베이스를 읽고 쓰는 작업은 단일 프로세스에서만 작동합니다. 해당 단일 프로세스 내에서 여러 연결을 열 수 있습니다. 예를 들어 하나의 연결을 통해 Insert 작업을 수행하고 두 번째 연결을 통해 Select 쿼리를 수행할 수 있습니다. 그러나 이러한 두 가지 서로 다른 연결에서는 SQL Server Compact를 사용하여 네트워크 공유를 통해 동일한 .sdf 파일에 액세스할 수 없으며 두 번째 연결의 경우 파일 공유 위반 오류가 반환됩니다.

다음 코드에서는 SQL Server Compact용 OLE DB 공급자를 사용하여 파일 모드를 설정하는 방법을 보여 줍니다.

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

표시: