【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;