Поделиться через


Метод CreateDatabase (SQL Server Compact)

Метод CreateDatabase служит для создания баз данных Microsoft SQL Server Compact 3.5.

Синтаксис

object.CreateDatabase(LocalConnection)

Параметры

Параметр Описание

LocalConnection

Строковое значение, в котором указано имя файла создаваемой базы данных и путь к нему

Прототип

HRESULT CreateDatabase(BSTR LocalConnection);

Пример

В первом образце показано, как создать, зашифровать, обновить, сжать и восстановить ранее созданную базу данных Microsoft SQL Server Compact 3.5 без учета регистра. Во втором образце показано, как создать, сжать и восстановить ранее созданную базу данных Microsoft SQL Server Compact 3.5 с параметрами сортировки с учетом регистра. Дополнительные сведения о базах данных 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:encrypt database='true';  SSCE:Database Password='123' ; ssce:encryption mode='ppc2003 compatibility';");

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:encrypt database='true';  SSCE:Database Password='123' ; ssce:encryption mode='ppc2003 compatibility';"); 

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='ppc2003 compatibility'; ");

//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 3.5 с учетом регистра, использование метода Метод 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.

Свойство

Описание

data source

Имя файла базы данных SQL Server Compact 3.5 и путь к нему. Необходимо указывать абсолютный, а не относительный путь к файлу базы данных.

Примечание. Приложение, которое работает на настольном компьютере, не сможет открыть соединение с базой данных, находящейся в SDF-файле на устройстве. Аналогичным образом приложение, которое работает на устройстве, не сможет открыть соединение с базой данных в SDF-файле, находящемся на настольном компьютере.

ssce: case sensitive

Логическое значение, определяющее, учитывает ли база данных регистр. При значении true учет регистра включен, при значении false — отключен. Если значение не указано, по умолчанию используется значение false.

ms173396.note(ru-ru,SQL.100).gifПримечание.
Это свойство введено в SQL Server Compact 3.5. Дополнительные сведения см. в разделе Работа с параметрами сортировки (SQL Server Compact).

ssce: database password

Пароль базы данных (до 40 символов в длину). Если пароль не задан, то по умолчанию пароль отсутствует. Если в базе данных включено шифрование, то этот параметр является обязательным. Если пароль задан, то включается шифрование базы данных

ssce: encrypt database

Логическое значение, определяющее, выполняется ли шифрование базы данных. Значение true означает, что шифрование включено, значение false — что отключено. Если значение не задано, то действует значение по умолчанию — false. Если шифрование включено, то необходимо также в соответствующем свойстве задать пароль. При задании пароля шифрование будет включено независимо от значения этого свойства.

ms173396.note(ru-ru,SQL.100).gifПримечание.
В следующей версии свойство encrypt будет удалено. Оно сохранено в SQL Server Compact 3.5 в целях обратной совместимости.

ssce:encryption mode

или

encryption mode

Это свойство может принимать значения

engine default

или

platform default

или

ppc2003 compatibility

Значение по умолчанию равно platform default.

ssce: max buffer size

Максимальный объем памяти в килобайтах, после превышения которого SQL Server Compact 3.5 начинает сброс изменений на диск. Если не указано, значение по умолчанию равно 640.

ssce: max database size

Максимальный размер базы данных в мегабайтах. Если не указано, значение по умолчанию равно 128.

ssce:mode

Режим, используемый при открытии файла базы данных. Список допустимых значений см. в следующей таблице. Если значение не указано, то действует значение по умолчанию — Read/Write.

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

Максимальный размер временного файла базы данных (в мегабайтах). Если не указано, значение по умолчанию равно 128.

locale identifier

Языковой стандарт (LCID), используемый базой данных.

В таблице приведены допустимые значения для свойства режима строки соединения.

Значение

Определение

Read Write

Разрешает нескольким процессам открывать и изменять базу данных. Это значение по умолчанию, если свойство режима не задано.

Read Only

Позволяет открыть копию базы данных, доступную только для чтения.

Exclusive

Запрещает другим процессам открывать или изменять базу данных.

Shared Read

Разрешает другим процессам читать, но не изменять базу данных, пока она открыта.

К строке соединения применяются следующие правила.

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

См. также

Другие ресурсы

Программирование объекта Engine (SQL Server Compact)

Справка и поддержка

Получение помощи (SQL Server Compact 3.5 с пакетом обновления 1)