• 【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; 
     7 IUnknown   *pIUnknownSession = NULL;
     8 IDBInitialize  *pIDBInitialize = NULL;
     9 // Create an instance of the OLE DB provider.
    10 hr = CoCreateInstance(CLSID_SQLSERVERCE_2_0, 0, CLSCTX_INPROC_SERVER, 
    11  IID_IDBInitialize, (void**)&pIDBInitialize);
    12 if(FAILED(hr))
    13 {
    14  RETAILMSG(1,(TEXT("1==CoCreateInstance: %d /r/n"),GetLastError()));
    15  goto CleanExit;
    16 }
    17 // Initialize property structures.
    18 VariantInit(&dbprop[0].vValue);
    19 for (i = 0; i < sizeof(sscedbprop) / sizeof(sscedbprop[0]); i++)
    20 {
    21  VariantInit(&sscedbprop[i].vValue);
    22 }
    23 // Leo:To create a new database, you must specify the DBPROP_INIT_DATASOURCE property to 
    24 // specify a name for the database.
    25 dbprop[0].dwPropertyID = DBPROP_INIT_DATASOURCE;
    26 dbprop[0].dwOptions = DBPROPOPTIONS_REQUIRED;
    27 dbprop[0].vValue.vt = VT_BSTR;
    28 dbprop[0].vValue.bstrVal = SysAllocString(L"Encrypted.sdf");
    29 if(NULL == dbprop[0].vValue.bstrVal)
    30 {
    31  hr = E_OUTOFMEMORY;
    32  goto CleanExit;
    33 }
    34 // Specify the property for encryption. 
    35 sscedbprop[0].dwPropertyID = DBPROP_SSCE_ENCRYPTDATABASE;
    36 sscedbprop[0].dwOptions = DBPROPOPTIONS_REQUIRED;
    37 sscedbprop[0].vValue.vt = VT_BOOL;
    38 sscedbprop[0].vValue.boolVal = VARIANT_TRUE;
    39 // Specify the password.
    40 sscedbprop[1].dwPropertyID = DBPROP_SSCE_DBPASSWORD;
    41 sscedbprop[1].dwOptions = DBPROPOPTIONS_REQUIRED;
    42 sscedbprop[1].vValue.vt = VT_BSTR;
    43 sscedbprop[1].vValue.bstrVal = SysAllocString(L"123456"); //密码
    44 if(NULL == sscedbprop[1].vValue.bstrVal)
    45 {
    46  hr = E_OUTOFMEMORY;
    47  goto CleanExit;
    48 }
    49 // Initialize the property sets.
    50 dbpropset[0].guidPropertySet = DBPROPSET_DBINIT;
    51 dbpropset[0].rgProperties  = dbprop;
    52 dbpropset[0].cProperties  = sizeof(dbprop)/sizeof(dbprop[0]);
    53 dbpropset[1].guidPropertySet = DBPROPSET_SSCE_DBINIT ;
    54 dbpropset[1].rgProperties = sscedbprop;
    55 dbpropset[1].cProperties = sizeof(sscedbprop)/sizeof(sscedbprop[0]);
    56 hr = pIDBInitialize->QueryInterface(IID_IDBDataSourceAdmin,(void **)&pIDBDataSourceAdmin);
    57 if(FAILED(hr))
    58 {
    59  RETAILMSG(1,(TEXT("1==pIDBInitialize->QueryInterface: %d /r/n"),hr));
    60  goto CleanExit;
    61 }
    62 // Create and initialize the database.
    63 hr = pIDBDataSourceAdmin->CreateDataSource(sizeof(dbpropset)/sizeof(dbpropset[0]),
    64  dbpropset, NULL, IID_IUnknown, &pIUnknownSession);
    65 if(FAILED(hr)) 
    66 {
    67  RETAILMSG(1,(TEXT("1==pIDBDataSourceAdmin->CreateDataSource: %d /r/n"),hr));
    68  goto CleanExit;
    69 }
    70 // At this point, the new encrypted database is created.
    71 leanExit:
    72 VariantClear(&dbprop[0].vValue);
    73 SysFreeString(dbprop[0].vValue.bstrVal);
    74 for(i = 0;i < sizeof(sscedbprop) / sizeof(sscedbprop[0]);i++)
    75 {
    76  VariantClear(&sscedbprop[i].vValue);
    77 }
    78 // Do cleanup tasks here.
    79 if(NULL != pIDBDataSourceAdmin)
    80 {
    81  pIDBDataSourceAdmin->Release();
    82  pIDBDataSourceAdmin = NULL;
    83 }
    84 if(NULL != pIDBInitialize)
    85 {
    86  pIDBInitialize->Release();
    87  pIDBInitialize = NULL;
    88 }
    89 if(NULL != pIUnknownSession)
    90 {
    91  pIUnknownSession->Release();
    92  pIUnknownSession = NULL;
    93 }
    94 return;
  • 相关阅读:
    mac上虚拟机:VMWare Fusion, VirtualBox, Parallels Desktop, CrossOver, Veertu
    linux使用其它用户 su
    CentOS7 rc.local开机开法启动
    taskkill
    Make sure that the controller has a parameterless public constructor.
    An Autofac Lifetime Primer
    Controlling Scope and Lifetime
    Instance scope
    Linq的TakeWhile的用法
    Git does not apply deleted files when merging an old branch into the master. How can I tell Git to apply deleted files?
  • 原文地址:https://www.cnblogs.com/91program/p/5246527.html
Copyright © 2020-2023  润新知