• 【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 }
  • 相关阅读:
    计算机网络的三种通讯模式(单播,广播,组播)
    java字符串面试题
    java使用纯命令行打包项目
    java字节码的工具(含IDEA插件)
    Spring配置之context:annotation与、component-scan以及annotation-driven
    Java ThreadLocal的使用案例
    对称平方数(to_string函数,stoi函数真香)
    字符串最后一位长度
    缺失的括号
    数三角形
  • 原文地址:https://www.cnblogs.com/91program/p/5246526.html
Copyright © 2020-2023  润新知