This one makes building ADO connection strings in client applications very easy. PromptDataSource is a member of the IDBPromptInitialize COM object. Creating it involves a small bit of C++ code:
IDBInitialize *pIDBInitialize = NULL; IDataInitialize *pIDataInitialize = NULL; IDBPromptInitialize *pIDBPromptInitialize = NULL; LPOLESTR strConn; CoCreateInstance(CLSID_DataLinks, NULL, CLSCTX_INPROC_SERVER, IID_IDataInitialize, (void **)&pIDataInitialize); CoCreateInstance(CLSID_DataLinks, NULL, CLSCTX_INPROC_SERVER, IID_IDBPromptInitialize, (void **)&pIDBPromptInitialize); pIDBPromptInitialize->PromptDataSource(NULL, 0, DBPROMPTOPTIONS_PROPERTYSHEET, 0, NULL, NULL, IID_IDBInitialize, (IUnknown **)&pIDBInitialize); pIDBInitialize->Initialize(); pIDataInitialize->GetInitializationString(pIDBInitialize, true, &strConn);
There are no checks anywhere here! You should add your own. C# makes things quite a bit easier.
MSDASC.DataLinks oDL = new MSDASC.DataLinksClass(); ADODB.Connection conn = new ADODB.ConnectionClass(); conn.ConnectionString = "Provider=sqloledb"; object oConn = (object)conn; oDL.PromptEdit(ref oConn); OleDbConnection xconn = new OleDbConnection(conn.ConnectionString); xconn.Open();
Of course, you need to add a reference to the com types: ‘Microsoft ActiveX Data Objects 2.8 Library’, and ‘Microsoft OLE DB Service Component 1.0 Type Library’, which provide access to the MSDASC and ADODB COM objects. You just extricate the Connection string at the end. I’m explicitly setting the provider in the second instance as I’m lazy, and I’m always accessing sqloledb. The 2.0 .NET framework may introduce an easier mechanism for doing this.