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 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)。 |
下表显示了连接字符串的 mode 属性的有效值。
值 |
定义 |
读写 |
允许多个进程打开并修改数据库。这是未指定 mode 属性时的默认设置。 |
只读 |
允许打开数据库的只读副本。 |
独占 |
不允许其他进程打开或修改数据库。 |
共享读取 |
允许其他进程读取您打开的数据库,但不允许修改。 |
下列规则适用于连接字符串:
所有空白字符都将忽略,值或引号内的空白字符除外。
关键字值对之间必须用分号 (;) 分隔。如果分号是值的一部分,还必须用引号对其进行分隔。
不支持任何转义序列。
与值类型无关。
名称不区分大小写。
如果某属性名在连接字符串中多次出现,将使用与最后一个关联的值。
值可以使用单引号或双引号进行分隔,例如,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;'