Share via


CreateDatabase メソッド (SQL Server Compact)

CreateDatabase メソッドは、新しい MicrosoftSQL Server Compact 4.0 データベースを作成します。

構文

object.CreateDatabase(LocalConnection)

パラメーター

パラメーター

説明

LocalConnection

作成するデータベースのパスとファイル名を指定する文字列値。

プロトタイプ

HRESULT CreateDatabase(BSTR LocalConnection);

使用例

最初の例では、MicrosoftSQL Server Compact 4.0 の大文字と小文字が区別されないデータベースを、作成、暗号化、アップグレード、最適化、および修復する方法を示します。2 番目の例では、照合順序で大文字と小文字を区別する 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 Service Pack 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

トランザクションがロックを待機する既定の間隔 (ミリ秒)。指定されない場合の既定値は、デスクトップ用が 5,000 ミリ秒、デバイス用が 2,000 ミリ秒です。

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

データベースで使用するロケール ID (LCID)。

次の表に、接続文字列で有効な mode プロパティの値を示します。

定義

Read Write

データベースを開く操作と変更する操作を、複数のプロセスに許可します。mode プロパティを指定しなかった場合、これが既定の設定です。

Read Only

データベースの読み取り専用のコピーを開くことができます。

Exclusive

他のプロセスがデータベースを開いたり変更したりできないようにします。

Shared Read

あるプロセスがデータベースを開いているとき、他のプロセスには読み取りのみを許可し、変更はできないようにします。

次の規則は、接続文字列に適用されます。

  1. 空白文字が値の中で使用されている場合、または引用符で囲まれている場合を除き、すべての空白文字を無視します。

  2. キーワード値のペアはセミコロン (;) で区切る必要があります。セミコロンが値の一部である場合は、値を引用符で区切る必要があります。

  3. エスケープ シーケンスはサポートされません。

  4. 値の型は無関係です。

  5. 名前の大文字と小文字は区別されません。

  6. 接続文字列に同じプロパティ名を複数指定した場合、最後に指定されている値が使用されます。

  7. 値は単一引用符または二重引用符で区切ることができます (name='value' or name="value" など)。1 つの接続文字列内で、単一引用符と二重引用符を混在させることができます。たとえば、次のように 1 つの接続文字列内で異なる引用符を使用できます。

    "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)