Метод 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. ![]()
Это свойство введено в SQL Server Compact 3.5. Дополнительные сведения см. в разделе Работа с параметрами сортировки (SQL Server Compact).
|
ssce: database password |
Пароль базы данных (до 40 символов в длину). Если пароль не задан, то по умолчанию пароль отсутствует. Если в базе данных включено шифрование, то этот параметр является обязательным. Если пароль задан, то включается шифрование базы данных |
ssce: encrypt database |
Логическое значение, определяющее, выполняется ли шифрование базы данных. Значение true означает, что шифрование включено, значение false — что отключено. Если значение не задано, то действует значение по умолчанию — false. Если шифрование включено, то необходимо также в соответствующем свойстве задать пароль. При задании пароля шифрование будет включено независимо от значения этого свойства. ![]()
В следующей версии свойство 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 |
Разрешает другим процессам читать, но не изменять базу данных, пока она открыта. |
К строке соединения применяются следующие правила.
Все пробелы, за исключением пробелов внутри значений или кавычек, не учитываются.
Пары «ключевое слово-значение» должны разделяться точками с запятой (;). Если точка с запятой входит в состав значения, то она также должна быть заключена в кавычки.
Экранирующие последовательности не поддерживаются.
Тип значения является несущественным.
В именах не учитывается регистр символов.
Если имя свойства повторяется в строке соединения несколько раз, то используется значение, заданное последним найденным вхождением.
Значения могут быть заключены в одинарные или двойные кавычки, например: 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)