共用方式為


CreateDatabase 方法 (SQL Server Compact)

CreateDatabase 方法會建立新的 MicrosoftSQL Server Compact 4.0 資料庫。

語法

object.CreateDatabase(LocalConnection)

參數

參數

說明

LocalConnection

字串值,其中指定要建立之資料庫的路徑和檔案名稱。

原型

HRESULT CreateDatabase(BSTR LocalConnection);

範例

第一個範例示範如何建立、加密、升級、壓縮及修復區分大小寫的 MicrosoftSQL Server Compact 4.0 資料庫。第二個範例示範如何建立、壓縮和修復包含區分大小寫定序的 MicrosoftSQL 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;
}

下列範例示範如何建立區分大小寫的 MicrosoftSQL 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

交易等候鎖定的預設毫秒數。如果未指定,桌上型電腦的預設值為 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

資料庫要使用的地區設定識別碼 ID (LCID)。

下表顯示連接字串模式屬性的有效值。

定義

讀取/寫入

允許多重處理程序開啟及修改資料庫。若未指定模式屬性,就會使用此預設值。

唯讀

讓您開啟一份唯讀資料庫。

獨佔

不讓其他處理程序開啟或修改資料庫。

共用讀取

在您開啟資料庫時,讓其他處理程序讀取此資料庫,但是無法加以修改。

下列規則適用於連接字串:

  1. 忽略所有的空白字元,但是在值之內或引號之內的空白字元除外。

  2. 關鍵字值配對必須以分號 (;) 隔開。如果值中含有分號,則此分號也必須以引號分隔。

  3. 不支援任何逸出序列。

  4. 與值型別無關。

  5. 名稱不區分大小寫。

  6. 如果屬性名稱在連接字串中出現一次以上,就會使用最後出現的項目。

  7. 可利用單引號或雙引號分隔數值,例如 name='value' 或 name="value"。連接字串中可以使用單引號或雙引號,只要使用另一種引號做為分隔符號即可。例如,下列為引號在連接字串內的有效使用方式:

    "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;'
    

請參閱

其他資源

引擎物件程式設計 (SQL Server Compact)