【SQL Server CE2.0】打开加密的数据库(源代码)

  1 HRESULT  hr;
  2 DBID  TableName;  // name of table for new constraint
  3 DBID  ColumnList[1]; // name of column for new constraint
  4 DBID  ConstraintName; // name of new constraint
  5 DBPROP  dbprop[1];
  6 DBPROP  sscedbprop[2]; // Property array for SSCE security properties
  7 DBPROPSET dbpropset[2];
  8 DBCONSTRAINTDESC rgConstraintDescs[1]; // Structure for constraint properties
  9 IDBInitialize  *pIDBInitialize       = NULL;
 10 IDBProperties  *pIDBProperties       = NULL;
 11 IDBCreateSession *pIDBCreateSession    = NULL;
 12 ITableDefinitionWithConstraints *pITbleDefWithConstrt = NULL; // supports adding constraints
 13 int i = 0;
 14 // Create an instance of the OLE DB Provider
 15 hr = CoCreateInstance(CLSID_SQLSERVERCE_2_0, 0, CLSCTX_INPROC_SERVER,
 16  IID_IDBInitialize, (void**)&pIDBInitialize);
 17 if(FAILED(hr))
 18 {
 19  RETAILMSG(1,(TEXT("2==CoCreateInstance failed: 0x%x/r/n"),hr));
 20  goto CleanExit;
 21 }
 22 // Initialize a property with name of database
 23 // Open an exsiting database myDatabase
 24 VariantInit(&dbprop[0].vValue);
 25 for(i = 0;i < sizeof(sscedbprop) / sizeof(sscedbprop[0]);i++)
 26 {
 27  VariantInit(&sscedbprop[i].vValue);
 28 }
 29 dbprop[0].dwPropertyID = DBPROP_INIT_DATASOURCE;
 30 dbprop[0].dwOptions = DBPROPOPTIONS_REQUIRED;
 31 dbprop[0].vValue.vt = VT_BSTR;
 32 dbprop[0].vValue.bstrVal = SysAllocString(L"Encrypted.sdf");
 33 // Specify the property for encryption.
 34 sscedbprop[0].dwPropertyID = DBPROP_SSCE_ENCRYPTDATABASE;
 35 sscedbprop[0].dwOptions = DBPROPOPTIONS_REQUIRED;
 36 sscedbprop[0].vValue.vt = VT_BOOL;
 37 sscedbprop[0].vValue.boolVal = VARIANT_TRUE;
 38 // Specify the password.
 39 sscedbprop[1].dwPropertyID = DBPROP_SSCE_DBPASSWORD;
 40 sscedbprop[1].dwOptions = DBPROPOPTIONS_REQUIRED;
 41 sscedbprop[1].vValue.vt = VT_BSTR;
 42 sscedbprop[1].vValue.bstrVal = SysAllocString(L"123456"); //密码
 43 if(NULL == sscedbprop[1].vValue.bstrVal)
 44 {
 45  hr = E_OUTOFMEMORY;
 46  goto CleanExit;
 47 }
 48 // Initialize the property set
 49 dbpropset[0].guidPropertySet = DBPROPSET_DBINIT;
 50 dbpropset[0].rgProperties = dbprop;
 51 dbpropset[0].cProperties = sizeof(dbprop)/sizeof(dbprop[0]);
 52 dbpropset[1].guidPropertySet = DBPROPSET_SSCE_DBINIT;
 53 dbpropset[1].rgProperties = sscedbprop;
 54 dbpropset[1].cProperties = sizeof(sscedbprop)/sizeof(sscedbprop[0]);
 55 //Set initialization properties.
 56 hr = pIDBInitialize->QueryInterface(IID_IDBProperties, (void **)&pIDBProperties);
 57 if(FAILED(hr))
 58 {
 59  RETAILMSG(1,(TEXT("2==pIDBInitialize->QueryInterface failed: 0x%x/r/n"),hr));
 60  goto CleanExit;
 61 }
 62 // Sets properties in the Data Source and initialization property groups
 63 hr = pIDBProperties->SetProperties(sizeof(sscedbprop) / sizeof(sscedbprop[0]), dbpropset);
 64 if(FAILED(hr))
 65 {
 66  RETAILMSG(1,(TEXT("2==pIDBProperties->SetProperties failed: 0x%x/r/n"),hr));
 67  goto CleanExit;
 68 }
 69 // Initializes a data source object
 70 hr = pIDBInitialize->Initialize();
 71 if(FAILED(hr))
 72 {
 73  RETAILMSG(1,(TEXT("2==pIDBInitialize->Initialize failed: 0x%x/r/n"),hr));
 74  goto CleanExit;
 75 }
 76 //只有已经创建表,以下操作才可能成功
 77 hr = pIDBInitialize->QueryInterface(IID_IDBCreateSession,(void**)&pIDBCreateSession);
 78 if(FAILED(hr))
 79 {
 80  RETAILMSG(1,(TEXT("2==pIDBInitialize->QueryInterface failed: 0x%x/r/n"),hr));
 81  goto CleanExit;
 82 }
 83 // Create a session object.
 84 hr = pIDBCreateSession->CreateSession(NULL, IID_ITableDefinitionWithConstraints,
 85  (IUnknown**) &pITbleDefWithConstrt);
 86 if(FAILED(hr))
 87 {
 88  RETAILMSG(1,(TEXT("2==pIDBCreateSession->CreateSession failed: 0x%x/r/n"),hr));
 89  goto CleanExit;
 90 }
 91 // (This sample assumes that we have information about the TestTable table database schema.)
 92 // Prepare the table name DBID as Employees.
 93 TableName.eKind = DBKIND_NAME;
 94 TableName.uName.pwszName = L"TestTable";
 95 // Prepare the list of columns that will get the UNIQUE constraint.
 96 // In this case, just the iID column.
 97 ColumnList[0].eKind = DBKIND_NAME;
 98 ColumnList[0].uName.pwszName = L"iID";
 99 // Build the DBCONSTRAINTDESC structure needed to make the
100 // ITableDefinitionWithConstraints::AddConstraint
101 // call to add the constraint.
102 rgConstraintDescs[0].pConstraintID = &ConstraintName;
103 rgConstraintDescs[0].ConstraintType = DBCONSTRAINTTYPE_UNIQUE;
104 rgConstraintDescs[0].cColumns = 1;
105 rgConstraintDescs[0].rgColumnList = ColumnList;
106 rgConstraintDescs[0].Deferrability = 0;  // SQL Server CE constraints are not deferrable.
107 // The following properties are not used in UNIQUE constraints
108 rgConstraintDescs[0].pReferencedTableID = NULL;
109 rgConstraintDescs[0].cForeignKeyColumns = 0;
110 rgConstraintDescs[0].rgForeignKeyColumnList = NULL;
111 rgConstraintDescs[0].pwszConstraintText = NULL;
112 rgConstraintDescs[0].UpdateRule = DBUPDELRULE_NOACTION;
113 rgConstraintDescs[0].DeleteRule = DBUPDELRULE_NOACTION;
114 rgConstraintDescs[0].MatchType = DBMATCHTYPE_NONE;
115 // Add the new constraint
116 hr = pITbleDefWithConstrt->AddConstraint(&TableName, rgConstraintDescs);
117 if(FAILED(hr))
118 { //0x80040e37: Table does not exist.
119  RETAILMSG(1,(TEXT("2==pITbleDefWithConstrt->AddConstraint: 0x%x/r/n"),hr));
120  goto CleanExit;
121 }
122 CleanExit:
123 VariantClear(&dbprop[0].vValue);
124 SysFreeString(dbprop[0].vValue.bstrVal);
125 for (i = 0; i < sizeof(sscedbprop) / sizeof(sscedbprop[0]); i++)
126 {
127  VariantClear(&sscedbprop[i].vValue);
128 }
129 if(NULL != pITbleDefWithConstrt)
130 {
131  pITbleDefWithConstrt->Release();
132  pITbleDefWithConstrt = NULL;
133 }
134 if(NULL != pIDBCreateSession)
135 {
136  pIDBCreateSession->Release();
137  pIDBCreateSession = NULL;
138 }
139
140 if(NULL != pIDBProperties)
141 {
142  pIDBProperties->Release();
143  pIDBProperties = NULL;
144 }
145 if(NULL != pIDBInitialize)
146 {
147  pIDBInitialize->Release();
148  pIDBInitialize = NULL;
149 }
时间: 2024-10-24 10:35:39

【SQL Server CE2.0】打开加密的数据库(源代码)的相关文章

SQL Server 2014 无法打开用户默认数据库 登录失败错误4064的解决方法

SQL Server 2014 无法打开用户默认数据库 登录失败错误4064的解决方法 晚上干了件蠢事,删除了管理员账户的默认数据库,紧接着就出现了标题里面的报错. 解决办法如下: 第一步:打开命令控制台 Win+R打开运行,输入CMD 第二步:复制粘贴如下命令 sqlcmd -E -d"master" -Q"exec sp_defaultdb N'PC\Admin', N'master'" 注意:把上条命令PC\Admin改成自己实际的账户,使用BackSlash

【SQL Server CE2.0】创建加密的数据库(源代码)

1 HRESULT hr = NOERROR; 2 DBPROPSET dbpropset[2]; 3 DBPROP dbprop[1]; // Property array to initialize the provider. 4 DBPROP sscedbprop[2]; // Property array for SSCE security properties 5 INT i = 0; 6 IDBDataSourceAdmin *pIDBDataSourceAdmin = NULL;

sqlserver2008创建数据库 报 Cannot read property is filestream 此属性不可用于sql server 7.0 解决

在创建数据库的时候,报整个错误 Cannot read property is filestream 此属性不可用于sql server 7.0 按照网上的方法  (http://blog.csdn.net/tryfinally/article/details/7207048),在sql配置管理器中,开启filestream  选项, 并且执行 EXEC sp_configure filestream_access_level, 2 RECONFIGURE 问题依然得不到解决. 后来用navic

SQL Server 审核(Audit)-- 创建数据库级别的审核

SQL Server 审核(Audit)-- 创建数据库级别的审核 任务1:创建审核 步骤1:打开SSMS,登录到指定的实例,展开"Security","Audits"节点. 步骤2:在"Audits"节点上,右键选择"New Audit-"选项. 步骤3:在"Create Audit"窗口,输入以下的参数. ? 在"Audit name"输入Audit-AdventureWorks20

SQL Server MDF 文件打开和相关问题图解

为了开发时的方便和不时之需:研究下不需要SQL Server,直接打开MDF数据库文件的软件: 1 SQL MDF Viewer 这是一个好工具:偶不得不说:不错:没有SQL Server的情况下,成功打开了MDF文件: 可以显示记录和数据库结构:不过看不到存储过程的代码,视图的代码能看到: 2 网际数据库浏览器 先安装, 界面: 登录要用户名密码:那么就是需要Sql Server 运行才能打开MDF 文件了: 如下图,原来此软件是用不同开发语言和数据库的连接字符串语法去连接数据库然后查询数据,

解决SQL Server管理器无法连接远程数据库Error: 1326错误

解决SQL Server管理器无法连接远程数据库Error: 1326错误 我们在在使用SQL Server时都会遇到使用SQL Server Management Studio无法连接远程数据库实例的问题,错误描述信息摘录如下: An error has occurred while establishing a connection to the server. (provider: Named Pipes Provider, error: 40 – Could not open a con

SQL Server 2008 R2 里迁移系统数据库的方法

针对不同的场景,采用不同的步骤. 对非master以及resource系统数据库而言,分两种情况. 1.非master以及resource系统数据库正常. 这里以迁移msdb为例,将msdb从D:\SQL2K8_DATA\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\迁移到D:\SQL2K8_DATA\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\system\目录下. 首先我们检查当前msdb的路径 ? 1 2 3 SELECT name, phys

SQL Server之备份和还原系统数据库

系统数据库是管理和维护SQL Server所必须的数据库,对服务器实例的运行至关重要.每次进行大量更新后必须备份多个系统数据库,包括master.model.msdb,备份这些系统数据库,就可以在发生系统故障(如硬盘丢失)时还原和恢复SQL Server系统 需要备份的系统数据库 1. 备份系统数据库 2. 模拟数据库损坏 (1)首先,停止SQL Server服务 (2)然后,删除系统数据库文件 (3)再次开启SQL Server服务,发现系统报错,SQL Server数据库系统瘫痪 3. 现在

SQL Server 2012笔记分享-54:数据库文件管理1

(一)添加文件 可以在线执行,不影响数据库使用 ,如图. 添加完成后,如图所示. 也可以通过脚本的形式来添加,如图. (二)删除文件 可以在线执行,不影响数据库使用 . 只有当文件中的实际使用空间为空时才能被成功执行 . (三)移动文件到不同的磁盘路径下 必须先将数据库脱机,将导致数据库暂时不可用 详情参考:http://msdn.microsoft.com/zh-cn/library/ms345483.aspx 若要将移动数据或日志文件作为计划的重定位的一部分,请执行下列步骤: 1. 运行以下