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)입니다.

다음 표에서는 연결 문자열의 유효한 모드 속성 값을 보여 줍니다.

정의

읽기/쓰기

여러 프로세스에서 데이터베이스를 열어 수정할 수 있습니다. 모드 속성을 지정하지 않으면 이 값이 기본적으로 설정됩니다.

읽기 전용

데이터베이스를 읽기 전용으로 열 수 있습니다.

배타

다른 프로세스에서 데이터베이스를 열거나 수정할 수 없습니다.

공유 읽기

데이터베이스가 열려 있는 동안 다른 프로세스에서 해당 데이터베이스를 읽을 수 있지만 수정할 수는 없습니다.

연결 문자열에 적용되는 규칙은 다음과 같습니다.

  1. 값 또는 따옴표 안에 있는 경우를 제외한 공백 문자는 모두 무시됩니다.

  2. 키워드 값 쌍은 세미콜론(;)으로 구분해야 합니다. 또한 세미콜론이 값의 일부이면 따옴표로 구분해야 합니다.

  3. 지원되는 이스케이프 시퀀스가 없습니다.

  4. 값 유형이 부적절합니다.

  5. 이름은 대/소문자를 구분하지 않습니다.

  6. 연결 문자열에 속성 이름이 두 번 이상 나오면 마지막에 나오는 속성 이름과 연결된 값이 사용됩니다.

  7. 값은 작은따옴표 또는 큰따옴표로 구분할 수 있습니다(예: 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;'
    

참고 항목

관련 자료

Engine 개체 프로그래밍(SQL Server Compact)