CreateDatabase 메서드(SQL Server Compact)
CreateDatabase 메서드는 새 MicrosoftSQL Server Compact 4.0 데이터베이스를 만듭니다.
구문
object.CreateDatabase(LocalConnection)
매개 변수
매개 변수 |
설명 |
---|---|
LocalConnection |
만들 데이터베이스의 경로 및 파일 이름을 지정하는 문자열 값입니다. |
프로토타입
HRESULT CreateDatabase(BSTR LocalConnection);
예
첫 번째 예에서는 MicrosoftSQL Server Compact 4.0 대/소문자를 구분하지 않는 데이터베이스를 생성, 암호화, 업그레이드, 압축 및 복구하는 방법을 보여 줍니다. 두 번째 예에서는 데이터 정렬이 대/소문자를 구분하는 Microsoft SQL Server Compact 4.0 데이터베이스를 생성, 압축 및 복구하는 방법을 보여 줍니다. 대/소문자 구분 SQL Server Compact 데이터베이스에 대한 자세한 내용은 데이터 정렬 작업(SQL Server Compact)을 참조하십시오.
// The first example:
// ClientAgent.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
// Include OS Header files
//
#include <stdio.h>
#include <conio.h>
#include <windows.h>
#include<iostream>
// Include OS Header files
//
#include <sqlce_err.h>
#include <sqlce_oledb.h>
#include <sqlce_sync.h>
#define ExitOnFail(hr) { if (FAILED(hr)) goto Exit; }
#define ExitOnNull(ptr) { if (NULL == (ptr)) goto Exit; }
#define ExitOnFailOrNull(hr, ptr) { ExitOnFail(hr); ExitOnNull(ptr); }
#define ExitOnAnyFailure(hr, pErr) { ExitOnFail(hr); if (FAILED(pErr->GetMajor())) goto Exit; }
#define SAFERELEASE(ptr) { if (NULL != ptr) ptr->Release(); ptr = NULL; }
#define DELNULL(ptr) { if (NULL != ptr) delete ptr; ptr = NULL; }
#define WAIT_FOR_KEY_OUT(hr) {\
printf("\n\nHRESULT = %lu (0x%08x)\n", hr, hr);\
printf("Press ENTER to continue ...\n");\
getchar();\
}
#define WAIT_FOR_KEY() {\
printf("\nPress ENTER to continue ...\n");\
getchar();\
}
//Files
BSTR connStrCreate = NULL;
BSTR connStrSrc = NULL;
BSTR connStrDst = NULL;
BSTR connStrCompactin = NULL;
BSTR connStrCompactout = NULL;
BSTR connStrRepairedin = NULL;
BSTR connStrRepairedout = NULL;
HRESULT GetInterfacePointers(
ISSCEEngine **ppEngine,
ISSCEError **ppErr = NULL
)
{
HRESULT hr = NOERROR;
if (NULL != ppEngine)
{
*ppEngine = (ISSCEEngine *) NULL;
hr = CoCreateInstance(CLSID_Engine, NULL,
CLSCTX_INPROC_SERVER, IID_ISSCEEngine, (LPVOID *) ppEngine);
ExitOnFailOrNull(hr, *ppEngine);
}
if (NULL != ppErr)
{
*ppErr = (ISSCEError *) NULL;
hr = CoCreateInstance(CLSID_SSCEError, NULL,
CLSCTX_INPROC_SERVER, IID_ISSCEError, (LPVOID *) ppErr);
ExitOnFailOrNull(hr, *ppErr);
}
Exit:
return hr;
}
int _tmain(int argc, _TCHAR* argv[])
{
ISSCEEngine *pEngine = NULL;
ISSCEError *pError = NULL;
HRESULT hr = NOERROR;
BSTR connStrCreate = SysAllocString((const OLECHAR*)L"Data Source=C:\\created35.sdf; SSCE:Database Password='123'; ");
BSTR connStrSrc = SysAllocString((const OLECHAR*)L"Data Source=C:\\encrypted31.sdf; SSCE:Database Password='123' ;");
BSTR connStrDst = SysAllocString((const OLECHAR*)L"Data Source=C:\\31upgradedto35.sdf; SSCE:Database Password='123' ; SSCE:Database Password='123' ; ssce:encryption mode=' platform default';");
BSTR connStrCompactin = SysAllocString((const OLECHAR*)L"Data Source=C:\\encryptedC35.sdf; SSCE:Database Password='encrypt' ; ");
BSTR connStrCompactout = SysAllocString((const OLECHAR*)L"Data Source='C:\\35compacted.sdf'; SSCE:Database Password='123' ; SSCE:Database Password='123' ; ssce:encryption mode= ’platform default’;");
BSTR connStrRepairedin = SysAllocString((const OLECHAR*)L"Data Source=C:\\encryptedR35.sdf; SSCE:Database Password='encrypt'");
BSTR connStrRepairedout = SysAllocString((const OLECHAR*)L"Data Source=C:\\35repaired.sdf; SSCE:Database Password='123' ; ssce:encryption mode=' platform default'; ");
//DeleteFile(L"c:\\created35.sdf");
//DeleteFile(L"c:\\encrypted31.sdf");
//DeleteFile(L"c:\\31upgradedto35.sdf");
//DeleteFile(L"c:\\encryptedC35.sdf");
//DeleteFile(L"c:\\35compacted.sdf");
//DeleteFile(L"c:\\encryptedR35.sdf");
//DeleteFile(L"c:\\35repaired.sdf");
CoInitialize(NULL);
hr = GetInterfacePointers(&pEngine, &pError);
ExitOnFail(hr);
// test create
//
hr = NOERROR;
hr=pEngine->CreateDatabase(connStrCreate);
printf("\n for create error=%lu",hr);
// test upgrade
// NOTE: you need a older ssce database for this - this wont work otherwise.
//
hr = NOERROR;
hr = pEngine->UpgradeDatabase(connStrSrc, connStrDst);
printf("\n for upgrade error=%lu",hr);
// test compact
//
hr = NOERROR;
hr=pEngine->CreateDatabase(connStrCompactin);
printf("\n for create error=%lu",hr);
hr = NOERROR;
hr=pEngine->CompactDatabase(connStrCompactin,connStrCompactout);
printf("\n for compact error=%lu",hr);
// test repair
//
hr = NOERROR;
hr=pEngine->CreateDatabase(connStrRepairedin);
printf("\n for create error=%lu",hr);
hr = NOERROR;
hr=pEngine->Repair(connStrRepairedin,connStrRepairedout,RECOVERCORRUPTED);
printf("\n for repair error=%lu",hr);
hr = NOERROR;
Exit:
SysFreeString(connStrCreate);
SysFreeString(connStrSrc);
SysFreeString(connStrDst);
SysFreeString(connStrCompactin);
SysFreeString(connStrCompactout);
SysFreeString(connStrRepairedin);
SysFreeString(connStrRepairedout);
CoUninitialize();
WAIT_FOR_KEY_OUT(hr);
return 0;
}
다음 예에서는 대/소문자 구분 Microsoft SQL Server Compact 4.0 데이터베이스를 만드는 방법, CompactDatabase 메서드(SQL Server Compact)를 사용하여 데이터베이스의 대/소문자 구분 설정을 변경하는 방법, 데이터 정렬이 대/소문자를 구분하는 복구된 데이터베이스를 만드는 방법을 보여 줍니다. 대/소문자 구분 SQL Server Compact 데이터베이스에 대한 자세한 내용은 데이터 정렬 작업(SQL Server Compact)을 참조하십시오.
// The second example:
// ClientAgent2.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
// Include OS Header files
//
#include <stdio.h>
#include <conio.h>
#include <windows.h>
#include<iostream>
// Include OS Header files
//
#include <sqlce_err.h>
#include <sqlce_oledb.h>
#include <sqlce_sync.h>
#define ExitOnFail(hr) { if (FAILED(hr)) goto Exit; }
#define ExitOnNull(ptr) { if (NULL == (ptr)) goto Exit; }
#define ExitOnFailOrNull(hr, ptr) { ExitOnFail(hr); ExitOnNull(ptr); }
#define ExitOnAnyFailure(hr, pErr) { ExitOnFail(hr); if (FAILED(pErr->GetMajor())) goto Exit; }
#define SAFERELEASE(ptr) { if (NULL != ptr) ptr->Release(); ptr = NULL; }
#define DELNULL(ptr) { if (NULL != ptr) delete ptr; ptr = NULL; }
#define WAIT_FOR_KEY_OUT(hr) {\
printf("\n\nHRESULT = %lu (0x%08x)\n", hr, hr);\
printf("Press ENTER to continue ...\n");\
getchar();\
}
#define WAIT_FOR_KEY() {\
printf("\nPress ENTER to continue ...\n");\
getchar();\
}
//Files
BSTR connStrCreate = NULL;
BSTR connStrSrc = NULL;
BSTR connStrCompactin = NULL;
BSTR connStrCompactout = NULL;
BSTR connStrRepairedin = NULL;
BSTR connStrRepairedout = NULL;
HRESULT GetInterfacePointers(
ISSCEEngine **ppEngine,
ISSCEError **ppErr = NULL
)
{
HRESULT hr = NOERROR;
if (NULL != ppEngine)
{
*ppEngine = (ISSCEEngine *) NULL;
hr = CoCreateInstance(CLSID_Engine, NULL,
CLSCTX_INPROC_SERVER, IID_ISSCEEngine, (LPVOID *) ppEngine);
ExitOnFailOrNull(hr, *ppEngine);
}
if (NULL != ppErr)
{
*ppErr = (ISSCEError *) NULL;
hr = CoCreateInstance(CLSID_SSCEError, NULL,
CLSCTX_INPROC_SERVER, IID_ISSCEError, (LPVOID *) ppErr);
ExitOnFailOrNull(hr, *ppErr);
}
Exit:
return hr;
}
int _tmain(int argc, _TCHAR* argv[])
{
ISSCEEngine *pEngine = NULL;
ISSCEError *pError = NULL;
HRESULT hr = NOERROR;
BSTR connStrCreate = SysAllocString((const OLECHAR*)L"Data source=C:\\created35.sdf; SSCE:case sensitive=true; SSCE:Database Password='123'");
BSTR connStrCompactin = SysAllocString((const OLECHAR*)L"Data Source=C:\\compactIn35.sdf; SSCE:Database Password='123'");
BSTR connStrCompactout = SysAllocString((const OLECHAR*)L"Data Source='C:\\compactOut35.sdf'; SSCE:Database Password='123'; SSCE:case sensitive=true;");
BSTR connStrRepairedin = SysAllocString((const OLECHAR*)L"Data Source=C:\\repairIn35.sdf; SSCE:Database Password='123';");
BSTR connStrRepairedout = SysAllocString((const OLECHAR*)L"Data Source=C:\\repairOut35.sdf; SSCE:Database Password='123' ; SSCE:case sensitive=true;");
//DeleteFile(L"c:\\created35.sdf");
//DeleteFile(L"c:\\compactIn35.sdf");
//DeleteFile(L"c:\\compactOut35.sdf");
//DeleteFile(L"c:\\repairIn35.sdf");
//DeleteFile(L"c:\\repairOut35.sdf");
CoInitialize(NULL);
hr = GetInterfacePointers(&pEngine, &pError);
ExitOnFail(hr);
// test create
//
hr = NOERROR;
hr=pEngine->CreateDatabase(connStrCreate);
printf("\n for create error=%lu",hr);
// test compact
//
hr = NOERROR;
hr=pEngine->CreateDatabase(connStrCompactin);
printf("\n for create error=%lu",hr);
hr = NOERROR;
hr=pEngine->CompactDatabase(connStrCompactin,connStrCompactout);
printf("\n for compact error=%lu",hr);
// test repair
//
hr = NOERROR;
hr=pEngine->CreateDatabase(connStrRepairedin);
printf("\n for create error=%lu",hr);
hr = NOERROR;
hr=pEngine->Repair(connStrRepairedin,connStrRepairedout,RECOVERCORRUPTED);
printf("\n for repair error=%lu",hr);
hr = NOERROR;
Exit:
SysFreeString(connStrCreate);
SysFreeString(connStrSrc);
SysFreeString(connStrCompactin);
SysFreeString(connStrCompactout);
SysFreeString(connStrRepairedin);
SysFreeString(connStrRepairedout);
CoUninitialize();
WAIT_FOR_KEY_OUT(hr);
return 0;
}
주의
중요
SQL Server Compact 3.5 서비스 팩 1 SP1 릴리스부터 대/소문자 구분 데이터 정렬도 지원됩니다. 자세한 내용은 데이터 정렬 작업(SQL Server Compact)을 참조하십시오.
다음 표에서는 SQL Server Compact 4.0에서 지원되는 연결 속성을 나열합니다.
속성 |
설명 |
data source |
SQL Server Compact 4.0 데이터베이스의 파일 경로 및 이름입니다. 데이터베이스 파일의 상대 경로 대신 절대 경로를 지정해야 합니다. 참고 데스크톱 컴퓨터에서 실행되는 응용 프로그램은 장치의 .sdf 파일에 대한 데이터베이스 연결을 열 수 없습니다. 마찬가지로 장치에서 실행되는 응용 프로그램은 데스크톱 컴퓨터의 .sdf 파일에 대한 데이터베이스 연결을 열 수 없습니다. |
ssce: case sensitive |
데이터베이스의 대/소문자 구분 여부를 결정하는 부울 값입니다. 대/소문자 구분을 사용하려면 true로 설정하고 사용하지 않으려면 false로 설정합니다. 값을 지정하지 않으면 false가 기본값으로 사용됩니다.
참고
이 속성은 SQL Server Compact 4.0 SP1 릴리스부터 도입되었습니다. 자세한 내용은 데이터 정렬 작업(SQL Server Compact)을 참조하십시오.
|
ssce: database password |
데이터베이스 암호이며 최대 40자까지 지정할 수 있습니다. 지정하지 않으면 기본적으로 암호를 사용하지 않습니다. 데이터베이스에 암호화를 설정하는 경우 이 속성은 필수입니다. 암호를 지정하면 데이터베이스에서 암호화 기능을 사용할 수 있습니다. |
ssce:encryption mode 또는 encryption mode |
이 속성의 값은 다음과 같습니다. engine default 또는 platform default |
ssce: max buffer size |
SQL Server Compact 4.0에서 변경 내용을 디스크에 플러시하기 전에 사용할 수 있는 최대 메모리 크기(KB)입니다. 값을 지정하지 않으면 640이 기본값으로 사용됩니다. |
ssce: max database size |
데이터베이스의 최대 크기(MB)입니다. 값을 지정하지 않으면 128이 기본값으로 사용됩니다. |
ssce:mode |
데이터베이스 파일을 열 때 사용할 모드입니다. 유효한 값에 대해서는 다음 표를 참조하십시오. 값을 지정하지 않으면 읽기/쓰기가 기본값으로 사용됩니다. |
ssce: default lock timeout |
트랜잭션의 기본 잠금 대기 시간(밀리초)입니다. 값을 지정하지 않으면 기본값이 데스크톱에 대해서는 5000밀리초이고 장치에 대해서는 2000밀리초입니다. |
ssce: default lock escalation |
행에서 페이지로 또는 페이지에서 테이블로 확대하기 전에 트랜잭션에서 포착할 잠금 수입니다. 값을 지정하지 않으면 100이 기본값으로 사용됩니다. |
ssce: flush interval |
커밋된 트랜잭션을 모두 디스크에 플러시하기 전의 간격(초)을 지정합니다. 값을 지정하지 않으면 10이 기본값으로 사용됩니다. |
ssce: autoshrink threshold |
자동 축소를 시작하기 전에 데이터베이스 파일에서 사용 가능한 여유 공간(백분율)입니다. 값이 100이면 자동 축소가 사용되지 않습니다. 값을 지정하지 않으면 60이 기본값으로 사용됩니다. |
ssce: temp file directory |
임시 데이터베이스의 위치입니다. 위치를 지정하지 않으면 데이터 원본 속성에 임시 저장소로 지정된 데이터베이스가 기본값으로 사용됩니다. |
ssce: temp file max size |
임시 데이터베이스 파일의 최대 크기(MB)입니다. 값을 지정하지 않으면 128이 기본값으로 사용됩니다. |
locale identifier |
데이터베이스에 사용할 LCID(로캘 ID)입니다. |
다음 표에서는 연결 문자열의 유효한 모드 속성 값을 보여 줍니다.
값 |
정의 |
읽기/쓰기 |
여러 프로세스에서 데이터베이스를 열어 수정할 수 있습니다. 모드 속성을 지정하지 않으면 이 값이 기본적으로 설정됩니다. |
읽기 전용 |
데이터베이스를 읽기 전용으로 열 수 있습니다. |
배타 |
다른 프로세스에서 데이터베이스를 열거나 수정할 수 없습니다. |
공유 읽기 |
데이터베이스가 열려 있는 동안 다른 프로세스에서 해당 데이터베이스를 읽을 수 있지만 수정할 수는 없습니다. |
연결 문자열에 적용되는 규칙은 다음과 같습니다.
값 또는 따옴표 안에 있는 경우를 제외한 공백 문자는 모두 무시됩니다.
키워드 값 쌍은 세미콜론(;)으로 구분해야 합니다. 또한 세미콜론이 값의 일부이면 따옴표로 구분해야 합니다.
지원되는 이스케이프 시퀀스가 없습니다.
값 유형이 부적절합니다.
이름은 대/소문자를 구분하지 않습니다.
연결 문자열에 속성 이름이 두 번 이상 나오면 마지막에 나오는 속성 이름과 연결된 값이 사용됩니다.
값은 작은따옴표 또는 큰따옴표로 구분할 수 있습니다(예: name='값' 또는 name="값"). 작은따옴표 또는 큰따옴표는 연결 문자열 내에서 다른 구분 기호로 구분될 수 있습니다. 연결 문자열 안에서 따옴표를 올바르게 사용하는 예는 다음과 같습니다.
"data source='MyDb.sdf'; ssce: mode=Exclusive;" 'data source="MyDb.sdf"; ssce: mode=Exclusive;'
- 하지만 다음 예는 올바르지 않습니다.
"data source="MyDb.sdf"; ssce: mode=Exclusive;" 'data source='MyDb.sdf'; ssce: mode=Exclusive;'