RT~就是udl?并获得连接字符串?

解决方案 »

  1.   

    直接用shellexecute执行一个udl文件可以吗??
      

  2.   

    哦,也可以目前是想用promptDataSource(刚问了个高手)弹出Data Link Properties对话框还不知道怎么用,看看都是com接口,晕了~不知道ADO有没有封装这个方法。
      

  3.   

    临时写的,没有测试过
    方法是正确的,但不保证代码没有错误
    // 导入 DataLinks类型库
    #pragma warning(disable:4192)
    #import "C:\\Program Files\\Common Files\\System\\Ole DB\\Oledb32.dll" no_namespace
    #pragma warning(default:4192)CString PromptEdit(_Connection* pConnection)
    {
    CString szConn;
    IDataSourceLocatorPtr pLocator; pLocator.CreateInstance(_T("DataLinks"));
    if(pLocator == NULL)
    return ""; if(pConnection == NULL)
    {
    pConnection = pLocator->PromptNew();
    szConn = (LPCTSTR)m_pConnection->ConnectionString;
    pConnection->Release();
    }
    else
    {
    pLocator->PromptEdit((IDispatch**)&pConnection);
    pDisp->Release();
    szConn = (LPCTSTR)m_pConnection->ConnectionString;
    }

    return szConn;
    }
      

  4.   

    看这个:
    http://www.chinaaspx.com/archive/vc/13454.htm
      

  5.   

    谢谢~
    如果no_namespace的话,会有很多redefine错误,我加了rename_namespace("oledb")(根据楼上提供的网址)
    另外pConnection->Release();这句会导致在Release中抛出异常,我估摸着原因可能是因为没有连接数据库的话就释放掉的话会抛出异常我试了试我的简化版能行,太感谢了~
    ADODB::_ConnectionPtr pConnection;
    pConnection.CreateInstance(_uuidof(ADODB::Connection));

    CString szConn;
    oledb::IDataSourceLocatorPtr pLocator; pLocator.CreateInstance(_uuidof(oledb::DataLinks));


    pConnection = pLocator->PromptNew();
    szConn = (LPCTSTR)pConnection->ConnectionString;    
    /*pLocator->PromptEdit((IDispatch**)&pConnection);
    pDisp->Release();
    szConn = (LPCTSTR)m_pConnection->ConnectionString;
    */ AfxMessageBox(szConn);
      

  6.   


    谢谢~看附带的demo下载链接转到codeguru去了,下载链接应该是无效了,一时也没找到原文看了下获益匪浅,不过其中的import似乎有些问题,我改了下,如下:
    #pragma warning(disable:4192)
    #import "C:\\Program Files\\Common Files\\System\\Ole DB\\Oledb32.dll" \
    rename_namespace("oledb")
    #pragma warning(default:4192)#import "c:\\Program Files\\Common Files\\System\\ADO\\msado15.dll" \
    rename("EOF", "EndOfFile") 
    还是集思广义了,下面不能用no_namespace(加的话会抱错),用的时候需要加上命名空间,比如上面贴的代码