Поделиться через


Материализованные объекты источника данных

Поставщик OLE DB собственного клиента SQL Server поддерживает материализованные объекты источника данных с помощью интерфейса IPersistFile.

Примеры

А. Сохранение инициализации источника данных:

В данном примере показана функция, которая сохраняет свойства инициализации источника данных, определяющих сервер, базу данных, и использование для соединения режима проверки подлинности Windows. Имена сервера и базы данных приходят в параметрах функции pLocation и pDatasource.

HRESULT SetAndSaveInitProps    (    IDBInitialize* pIDBInitialize,    WCHAR* pDataSource,    WCHAR* pCatalog,    BOOL bUseWinNTAuth    )    {    const ULONG     nProps = 4;    ULONG           nSSProps;    ULONG           nPropSets;    ULONG           nProp;    IDBProperties*  pIDBProperties  = NULL;    IPersistFile*   pIPersistFile   = NULL;    DBPROP          aInitProps[nProps];    DBPROP*         aSSInitProps    = NULL;    DBPROPSET*      aInitPropSets   = NULL;    HRESULT         hr;        nSSProps = 0;        nPropSets = 1;    aInitPropSets = new DBPROPSET[nPropSets];    // Initialize common property options.    for (nProp = 0; nProp < nProps; nProp++)        {        VariantInit(&aInitProps[nProp].vValue);        aInitProps[nProp].dwOptions = DBPROPOPTIONS_REQUIRED;        aInitProps[nProp].colid = DB_NULLID;        }    // Level of prompting that will be done to complete the connection    // process.    aInitProps[0].dwPropertyID = DBPROP_INIT_PROMPT;    aInitProps[0].vValue.vt = VT_I2;    aInitProps[0].vValue.iVal = DBPROMPT_NOPROMPT;         // Server name.    aInitProps[1].dwPropertyID = DBPROP_INIT_DATASOURCE;        aInitProps[1].vValue.vt = VT_BSTR;    aInitProps[1].vValue.bstrVal = SysAllocString(pDataSource);    // Database.    aInitProps[2].dwPropertyID = DBPROP_INIT_CATALOG;    aInitProps[2].vValue.vt = VT_BSTR;    aInitProps[2].vValue.bstrVal = SysAllocString(pCatalog);    aInitProps[3].dwPropertyID = DBPROP_AUTH_INTEGRATED;    if (bUseWinNTAuth == TRUE)    {        aInitProps[3].vValue.vt = VT_BSTR;        aInitProps[3].vValue.bstrVal = SysAllocString(L"SSPI");    } //end if    // Now that properties are set, construct the PropertySet array.    aInitPropSets[0].guidPropertySet = DBPROPSET_DBINIT;    aInitPropSets[0].cProperties = nProps;    aInitPropSets[0].rgProperties = aInitProps;    // Set initialization properties    pIDBInitialize->QueryInterface(IID_IDBProperties,        (void**) &pIDBProperties);    hr = pIDBProperties->SetProperties(nPropSets, aInitPropSets);    if (FAILED(hr))        {        // Display error from failed SetProperties.        }    pIDBProperties->Release();    // Free references on OLE known strings.    for (nProp = 0; nProp < nProps; nProp++)        {        if (aInitProps[nProp].vValue.vt == VT_BSTR)            SysFreeString(aInitProps[nProp].vValue.bstrVal);        }    for (nProp = 0; nProp < nSSProps; nProp++)        {        if (aSSInitProps[nProp].vValue.vt == VT_BSTR)            SysFreeString(aSSInitProps[nProp].vValue.bstrVal);        }    // Free dynamically allocated memory.    delete [] aInitPropSets;    delete [] aSSInitProps;    // On success, persist the data source.    if (SUCCEEDED(hr))        {        pIDBInitialize->QueryInterface(IID_IPersistFile,            (void**) &pIPersistFile);        hr = pIPersistFile->Save(OLESTR("MyDataSource.txt"), FALSE);        if (FAILED(hr))            {            // Display errors from IPersistFile interface.            }        pIPersistFile->Release();        }    return (hr);    }

Б. Использование инициализации сохраненных источников данных:

Данный пример использует материализованный объект источника данных с дополнительными свойствами инициализации, которые предоставляют имя входа и пароль SQL Server.

HRESULT InitFromPersistedDS    (    IDBInitialize* pIDBInitialize,    WCHAR* pPersistedDSN,    WCHAR* pUID,    WCHAR* pPWD    )    {    //const ULONG   nProps = 3;    const ULONG     nProps = 1;    const ULONG     nPropSets = 1;    ULONG           nProp;    IDBProperties*  pIDBProperties  = NULL;    IPersistFile*   pIPersistFile   = NULL;    DBPROP          aInitProps[nProps];    DBPROPSET       aInitPropSets[nPropSets];    HRESULT         hr;    // First load the persisted data source information.    pIDBInitialize->QueryInterface(IID_IPersistFile,        (void**) &pIPersistFile);    hr = pIPersistFile->Load(pPersistedDSN, STGM_DIRECT);    if (FAILED(hr))        {        // Display errors from IPersistFile interface.        }    pIPersistFile->Release();    if (FAILED(hr))        {        return (hr);        }    // Initialize common property options.    for (nProp = 0; nProp < nProps; nProp++)        {        VariantInit(&aInitProps[nProp].vValue);        aInitProps[nProp].dwOptions = DBPROPOPTIONS_REQUIRED;        aInitProps[nProp].colid = DB_NULLID;        }    // Level of prompting that will be done to complete the connection    // process.    aInitProps[0].dwPropertyID = DBPROP_INIT_PROMPT;    aInitProps[0].vValue.vt = VT_I2;    aInitProps[0].vValue.iVal = DBPROMPT_NOPROMPT;        // Now that properties are set, construct the PropertySet array.    aInitPropSets[0].guidPropertySet = DBPROPSET_DBINIT;    aInitPropSets[0].cProperties = nProps;    aInitPropSets[0].rgProperties = aInitProps;    // Set initialization properties    pIDBInitialize->QueryInterface(IID_IDBProperties,        (void**) &pIDBProperties);    hr = pIDBProperties->SetProperties(nPropSets, aInitPropSets);    if (SUCCEEDED(hr))        {        hr = pIDBInitialize->Initialize();        if (FAILED(hr))            {            DumpError(pIDBInitialize, IID_IDBInitialize);            }        }    else        {        // Display error from failed SetProperties.        }    pIDBProperties->Release();    // Free references on OLE known strings.    for (nProp = 0; nProp < nProps; nProp++)        {        if (aInitProps[nProp].vValue.vt == VT_BSTR)            SysFreeString(aInitProps[nProp].vValue.bstrVal);        }    return (hr);    }

Метод IPersistFile::Save может быть вызван до или после вызова IDBInitialize::Initialize. Вызов метода после успешного возврата из IDBInitialize::Initialize гарантирует сохранение достоверной спецификации источника данных.

См. также

Основные понятия