zoukankan      html  css  js  c++  java
  • 【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 }
  • 相关阅读:
    .net core读取appsettings.config中文乱码问题
    vs2017错误:当前页面的脚本发生错误
    VS Code中无法识别npm命令
    Visual Studio报错/plugin.vs.js,行:1074,错误:缺少标识符、字符串或数字
    记录一次在生成数据库服务器上出现The timeout period elapsed prior to completion of the operation or the server is not responding.和Exception has been thrown by the target of an invocation的解决办法
    Java集合框架
    java hash表
    Java Dictionary 类存储键值
    java数据结构 栈stack
    java封装
  • 原文地址:https://www.cnblogs.com/91program/p/5246526.html
Copyright © 2011-2022 走看看