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

摘要:
1结果;2DBID表格名称;//新约束的表名称DBIDColumnList[1];//新约束的列名称4 DBID约束名称;//新约束的名称5DBPROPDbprop[1];6DBPROPsschedprop[2];//财产阵列
  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 }

免责声明:文章转载自《【SQL Server CE2.0】打开加密的数据库(源代码)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇【SQL Server CE2.0】创建加密的数据库(源代码)EVC在双核PC上调试速度慢的原因下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

C/C++ 位域知识小结

C/C++ 位域知识小结 几篇较全面的位域相关的文章: http://www.uplook.cn/blog/9/93362/ C/C++位域(Bit-fields)之我见 C中的位域与大小端问题 内存对齐全攻略–涉及位域的内存对齐原则 本文主要对位域相关知识进行了一下梳理,参考如下: C语言中的位域 史上最全的C位域总结2...

Ogre2.0 全新功能打造新3D引擎

不知当初是在那看到,说是Ogre2.0浪费了一个版本号,当时也没多想,以为没多大更新,一直到现在想做一个编辑器时,忽然想到要看下最新版本的更新,不看不知道,一看吓一跳,所以说,网络上的话少信,你不认识别人,别人张嘴就来,对别人也没损失,还可以装B下,靠. 从现在Ogre2.1的代码来看,大约总结下,更新包含去掉过多的设计模式,SoA的数据结构(用于SIMD...

MFC获取rgb图像数据后动态显示及保存图片的方法

该情况可用于视频通信中获取的位图数据回放显示或显示摄像头捕获的本地图像 第一种方法 #include<vfw.h> 加载 vfw32.lib 链接库 //------------------------------设置位图头结构信息---------------------------------------------------...

[CF711D]Directed Roads(强联通分量,计数)

题目链接:http://codeforces.com/contest/711/problem/D 题意:n个点n条边的有向图,每个点都指向另外一个点,要翻转其中的几条边,问有多少种翻转方式可以使这张图没有环存在。 可以先求强联通分量,由于题目的特殊性,每个点只有一个出边,所以加入一个强联通分量至少有两个点,则每一个强联通分量中必定有且仅有只有一个环。我们考虑...

博弈题目小结

HDU 2174kiki's game 题意:有一个N*M的棋盘,起点在右上角,两个人每轮可把棋子向左、向下或者向左下移动一格,直到不能移动棋子者输。 NP图解决: 概念: 必败点(P点):前一个选手将取胜的位置称为必败点。 必胜点(N点):下一个选手将取胜的位置成为必胜点。 性质: 步骤: NP图: AC code: 1 #include...

一些常用的排序算法(C版)

1. 直接插入排序(稳定排序) 简单的说就是将序列分为有序序列和无序序列。每一趟排序都是将无序序列的第一个元素插入有序序列中。R[1… i-1] <- R[i…n] , 每次取R[i]插入到R[1… i-1]中。 步骤如下: 1> 在R[1 … i-1]中找到R[i]的插入位置k (0<k<i) 2> 将R[k … i-1]均后...