Condividi tramite


IDBPromptInitialize::PromptDataSource

Opens the Data Link Properties dialog box. Returns an uninitialized data source object with the specified properties set.

Syntax

HRESULT PromptDataSource(
   IUnknown *          pUnkOuter,
   HWND                hWndParent,
   DBPROMPTOPTIONS     dwPromptOptions,
   ULONG               cSourceTypeFilter,
   DBSOURCETYPE *      rgSourceTypeFilter,
   LPCOLESTR           pwszszzProviderFilter,
   REFIID              riid,
   IUnknown **         ppDataSource);

Parameters

  • pUnkOuter [in]
    A pointer to the controlling IUnknown interface if the data source object is being created as a part of an aggregate; otherwise, it is a null pointer.

  • hWndParent [in]
    The parent window handle for dialog boxes to be displayed. The dialog box will always be centered within this window.

  • dwPromptOptions [in]
    Specifies whether to prompt with the Create New Data Link wizard or the Data Link Properties dialog box.

    Value

    Meaning

    DBPROMPTOPTIONS_DISABLE_PROVIDER_SELECTION

    Do not prompt for provider selection. Valid only if *ppDataSource is a pointer to an existing data source object. Setting this flag without specifying a valid data source object in ppDataSource on input returns the error E_INVALIDARG.

    DBPROMPTOPTIONS_DISABLESAVEPASSWORD

    Disables the "Allow Saving password" checkbox. When set, the value of the property DBPROP_AUTH_PERSIST_SENSITIVE_AUTHINFO is set to VARIANT_FALSE on the provider.

    DBPROMPTOPTIONS_PROPERTYSHEET

    Prompt with Data Link Properties dialog box.

    DBPROMPTOPTIONS_WIZARDSHEET

    Deprecated. Retained for backward compatibility only.

  • cSourceTypeFilter [in]
    Number of DBSOURCETYPE values in rgSourceTypeFilter. If cSourceTypeFilter is zero, the value of rgSourceTypeFilter is ignored and the Provider selection tab will list standard tabular OLE DB providers.

  • rgSourceTypeFilter [in]
    Types of providers to display in the Provider selection tab. Must point to a valid array of DBSOURCETYPE values. Valid source types include the values described in the following table.

    Value

    Meaning

    DBSOURCETYPE_DATASOURCE_TDP

    OLE DB tabular data provider

    DBSOURCETYPE_DATASOURCE_MDP

    OLE DB multidimensional data provider

  • pwszszzProviderFilter [in]
    A double null-terminated string of ProgIDs.

    This parameter must be a null pointer or must point to a valid string. If it is non-null, the providers presented to the user will be limited to those that match the providers' ProgIDs specified in pwszszzProviderFilter. If only one provider is specified, the dialog is created with the connection tab displayed. If more than one provider is specified, the provider selection tab is displayed first.

    Providers specified in pwszszzProviderFilter that are not registered on the machine are ignored. If none of the providers are registered, an error is returned.

  • riid [in]
    The requested interface for the data link returned in *ppDataSource.

  • ppDataSource [in, out]
    A pointer to a data source object.

    If *ppDataSource is null on entry, IDBPromptInitialize::PromptDataSource generates a new data source object based on the information specified by the user and returns a pointer to that data source object in *ppDataSource.

    If *ppDataSource is non-null on entry, IDBPromptInitialize::PromptDataSource uses the properties returned by IProperties::GetProperties as initial values. If the user selects a different provider, PromptDataSource will release the original *ppDataSource and create a new data source object. On exit, *ppDataSource will be set to a pointer to the interface specified by riid. If the user selects the same provider but requests a different interface by supplying a different value for riid, the output value of *ppDataSource will be a pointer to the required interface on the existing data source object.

    If *ppDataSource is non-null on entry and the call returns an error, *ppDataSource is untouched. The caller is strongly advised to check the return value when calling IDBPromptInitialize::PromptDataSource on an existing data source object.

Return Code

  • S_OK
    The method succeeded.

  • E_FAIL
    A provider-specific error occurred.

  • DB_E_CANCELED
    The user canceled the dialog.

  • E_NOINTERFACE
    The data source object did not support the interface specified in riid.

    riid was IID_NULL.

  • DB_E_NOAGGREGATION
    pUnkOuter was not a null pointer, and riid was something other than IID_IUnknown.

    pUnkOuter was not a null pointer, and the provider does not support aggregation.

    pUnkOuter and *ppDataSource were both non-null.

  • E_INVALIDARG
    ppDataSource was a null pointer.

    cSourceTypeFilter was not zero, and rgSourceTypeFilter was a null pointer.

    An element in rgSourceTypeFilter was not a valid filter.

    dwPromptOptions was an invalid value.

    *ppDataSource was a null pointer, and DBPROMPTOPTIONS_DISABLE_PROVIDER_SELECTION was specified in dwPromptOptions.

    *ppDataSource did not refer to a valid data source object.

  • DB_E_NOPROVIDERSREGISTERED
    No OLE DB providers of the type specified in rgSourceTypeFilter and matching the filter, if any, specified in pwszszzProviderFilter were found on the machine.

  • E_UNEXPECTED
    The data source object cannot return the requested interface because the data source object is not initialized.

Comments

Providers that do not support aggregation cannot be initialized via IDBPromptInitialize::PromptDataSource.

Code Example

The following code fragment shows how a consumer might use IDBPromptInitialize::PromptDataSource to prompt the user for connection information:

// PromptDataSource.cpp
// compile with: ole32.lib oleaut32.lib

#ifndef _WIN32_WINNT
#define _WIN32_WINNT 0x0500
#endif

#include <msdasc.h>
#define DBINITCONSTANTS
#include <sqloledb.h>

int main() {
   CoInitializeEx(NULL, COINIT_MULTITHREADED);

   // First CoCreate the OLE DB Service Component Manager.
   HRESULT hr = S_OK;
   IDataInitialize *  pIDataInitialize = NULL;
   hr = CoCreateInstance(CLSID_DataLinks, NULL, CLSCTX_INPROC_SERVER, IID_IDataInitialize, reinterpret_cast<void **>(&pIDataInitialize));

   // CreateDBInstance to instantiate previously stored provider.
   IDBProperties * pIDBProperties = NULL;
   hr = pIDataInitialize->CreateDBInstance(CLSID_SQLOLEDB, NULL, CLSCTX_INPROC_SERVER, NULL, IID_IDBProperties, reinterpret_cast<IUnknown **>(&pIDBProperties));

   // Set some previously stored properties.
   DBPROPSET propSets[1];
   DBPROP props[2];

   props[0].dwPropertyID = DBPROP_INIT_DATASOURCE;
   props[0].dwOptions = DBPROPOPTIONS_REQUIRED;
   props[0].colid = DB_NULLID;
   props[0].vValue.vt = VT_BSTR;
   props[0].vValue.bstrVal = SysAllocString(L"test");

   props[1].dwPropertyID = DBPROP_AUTH_INTEGRATED;
   props[1].dwOptions = DBPROPOPTIONS_REQUIRED;
   props[1].colid = DB_NULLID;
   props[1].vValue.vt = VT_BSTR;
   props[1].vValue.bstrVal = SysAllocString(L"SSPI");

   propSets[0].cProperties = 2;
   propSets[0].guidPropertySet = DBPROPSET_DBINIT;
   propSets[0].rgProperties = &props[0];

   hr = pIDBProperties->SetProperties(1, &propSets[0]);

   // Prompt the user to view/edit the connection information.
   IDBPromptInitialize *pIDBPromptInitialize = NULL;
   hr = pIDataInitialize ->QueryInterface(IID_IDBPromptInitialize, reinterpret_cast<void **>(&pIDBPromptInitialize)); 

   hr = pIDBPromptInitialize->PromptDataSource(
      NULL,
      NULL,
      DBPROMPTOPTIONS_PROPERTYSHEET,
      0, NULL,
      NULL,
      IID_IDBProperties,
      reinterpret_cast<IUnknown **>(&pIDBProperties));

   pIDBProperties->Release();

   pIDataInitialize->Release();
   pIDBPromptInitialize->Release();

   CoUninitialize();
}