How to: Create a Database by Using OLE DB (Programmatically)

The OLE DB provider for SQL Server 2005 Compact Edition (SQL Server Compact Edition). reveals the IDBDataSourceAdmin interface through which you can create and manage databases in SQL Server Compact Edition. To create a new database, you specify the DBPROP_INIT_DATASOURCE property to specify a name for the database.

For more information, see Creating Databases with OLE DB.

Example

The following example shows how to create an encrypted database by using the OLE DB provider for SQL Server Compact Edition. To create a database that is only password-protected or a standard database, remove the unnecessary DBPROP structures.

// Object declarations
HRESULT            hr                   = NOERROR; 
DBPROPSET          dbpropset[2]; 
DBPROP             dbprop[1]; // Property array to initialize the provider.
DBPROP             sscedbprop[2]; // Property array for SSCE security properties
INT                i                    = 0;
IDBDataSourceAdmin *pIDBDataSourceAdmin = NULL; 
IUnknown           *pIUnknownSession    = NULL;

// Create an instance of the OLE DB provider.
hr = CoCreateInstance( CLSID_SQLSERVERCE_3_0, 0, CLSCTX_INPROC_SERVER, 
    IID_IDBDataSourceAdmin, (void**)& pIDBDataSourceAdmin);
if(FAILED(hr))
{
    goto Exit;
}

// Initialize property structures.
VariantInit(&dbprop[0].vValue);
for (int i = 0; i < sizeof(sscedbprop) / sizeof(sscedbprop[0]); i++)
{
    VariantInit(&sscedbprop[i].vValue);
}

// Specify the property with name of the database.
dbprop[0].dwPropertyID  = DBPROP_INIT_DATASOURCE;
dbprop[0].dwOptions   = DBPROPOPTIONS_REQUIRED;
dbprop[0].vValue.vt   = VT_BSTR;
dbprop[0].vValue.bstrVal = SysAllocString(L"NewDatabase.sdf"); 
if(NULL == dbprop[0].vValue.bstrVal)
{
    hr = E_OUTOFMEMORY;
    goto Exit;
}

// Specify the property for encryption. 
sscedbprop[0].dwPropertyID = DBPROP_SSCE_ENCRYPTDATABASE;
sscedbprop[0].dwOptions = DBPROPOPTIONS_REQUIRED;
sscedbprop[0].vValue.vt = VT_BOOL;
sscedbprop[0].vValue.boolVal = VARIANT_TRUE;

// Specify the password.
sscedbprop[1].dwPropertyID = DBPROP_SSCE_DBPASSWORD;
sscedbprop[1].dwOptions = DBPROPOPTIONS_REQUIRED;
sscedbprop[1].vValue.vt = VT_BSTR;
sscedbprop[1].vValue.bstrVal = SysAllocString(L"mypassword");
if(NULL == sscedbprop[1].vValue.bstrVal)
{
    hr = E_OUTOFMEMORY;
    goto Exit;
}

// Initialize the property sets.
dbpropset[0].guidPropertySet = DBPROPSET_DBINIT;
dbpropset[0].rgProperties  = dbprop;
dbpropset[0].cProperties  = sizeof(dbprop)/sizeof(dbprop[0]);

dbpropset[1].guidPropertySet = DBPROPSET_SSCE_DBINIT ;
dbpropset[1].rgProperties  = sscedbprop;
dbpropset[1].cProperties  = sizeof(sscedbprop)/sizeof(sscedbprop[0]);

// Create and initialize the database.
hr = pIDBDataSourceAdmin->CreateDataSource(sizeof(dbpropset)/sizeof(dbpropset[0]),
    dbpropset, NULL, IID_IUnknown, &pIUnknownSession);
if(FAILED(hr)) 
{
    goto Exit;
}
// At this point, the new encrypted database is created.

Exit:
// Do cleanup tasks here.

return;