小弟真的快被他弄疯了,也许自己知识不够全面吧,现把疑点与大家讨论一下,也许自己水平有限,希望各位多多指点:疑点一:在dll里面用ado 连接sqlserver, 连接信息没有错,但是就是不能与数据库建立连接,而奇怪的就是,用相同的代码,用access的连接信息却可以很正常的连接access数据库。疑点二:还是用相同的代码,在mfc exe application下面连接sqlserver就可以很正常的连接数据库,用access连接也可以//////////////////////////调试2///////////////////////////////
::CoInitialize(NULL);///初始化COM库
    _ConnectionPtr m_pConnection;
//  _RecordsetPtr m_pRecordset;
////////////连接数据库//////////////
HRESULT hr;
try {
hr = m_pConnection.CreateInstance( __uuidof ( Connection ) );///创建Connection对象
if(SUCCEEDED(hr)) {
//access可以
//hr = m_pConnection->Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=dbTest.mdb","","",adModeUnknown);///连接数据库

//sql server不行
hr = m_pConnection->Open("Provider=SQLOLEDB;Data Source=ricky;Initial Catalog=dbTest; User ID=sa;Password=","","",adModeUnknown);///连接数据库
MessageBeep(MB_OK);
}
}
catch(_com_error e) {  ///捕捉异常 
MessageBeep(MB_ICONASTERISK);
}//////////////////////////////////////////////////////////
换成下面的代码还是相同的疑点://////////////////////////调试1///////////////////////////////
AfxOleInit();///初始化COM库
    _ConnectionPtr m_pConnection;
//  _RecordsetPtr m_pRecordset;
////////////连接数据库//////////////
HRESULT hr;
try {
PlayText("1");
hr = m_pConnection.CreateInstance("ADODB.Connection");///创建Connection对象
if(SUCCEEDED(hr)) {
//accss可以
//hr = m_pConnection->Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=dbTest.mdb","","",adModeUnknown);///连接数据库
//sql server就是不行,真搞不懂.....:(
hr = m_pConnection->Open("Provider=sqloledb;Data Source=ricky;Initial Catalog=dbTest;Integrated Security=SSPI;","","",adModeUnknown); //连接数据库
PlayText("2");
}
}
catch(_com_error e) {  ///捕捉异常 
PlayText("错误");
}
////////////////////////////////////////////////////////////////
如能解决问题,1000分送给高手们我都值得。急!!!!!!!!!

解决方案 »

  1.   

    问题一定能够解决,我已全部在我的DLL中实现.等会给出代码.
      

  2.   

    下面是我的代码片段,希望对你有所帮助,如果要使用你自己的方法你就得注意每一个参数的意义         char buf[500];
    ::CoInitialize(NULL);  try
    {
    hr=m_pCnn.CreateInstance("ADODB.Connection");
    sprintf(buf,"Provider=SQLOLEDB.1;Persist Security Info=False;Password=%s;User ID=sa;Initial Catalog=MYDB;Data Source=%s",strPwd,m_strServerName);
    if(SUCCEEDED(hr))
    {
       hr=m_pCnn->Open(buf,"","",-1);
    }
    } catch(_com_error *e)
    {
    AfxMessageBox(e->ErrorMessage());
    bSucc = FALSE;
    }
    catch(CException *e)
    {
    e->ReportError();
    bSucc = FALSE;
    }
    catch(...)
    {
    AfxMessageBox("网络出错,联接不到数据库!");
    bSucc = FALSE;
    }   
    //注意结束时要关闭COM
      

  3.   

    很感谢一面红旗兄弟的热心帮助,但是我还是连接不上,小弟有个请求,你能把你调试成功的全部源代码发给我参考一下吗?在此谢谢你了!email: [email protected]
      

  4.   

    我想起来了,我的DLL中装的是DCOM 方法,上面的方法我是在主工程中通过的,
    不在DLL中,如果你用ODBC的方法能通过,用Ado这种方法一定通过的.
      

  5.   

    Ricky_Yahoo  这个名字好熟悉,你是不是在上海?
      

  6.   

    你的调试2我在dll中试了一把,是可以的。
    1.ricky是SQL server所在服务器的名字吗?
    2.把adModeUnknown改为adConnectUnspecified试试
    3.Password是空的吗?
    4.要调用::CoUninitialize();
    另外试试用OLE DB Provider for ODBC。
      

  7.   

    真的很感谢各位。我用asp调试的时候,是没有问题出现,表示我用的连接字符串和其他信息是正确的。。<%
        constr="Driver={SQL Server};SERVER=towin;USER ID=Ricky;PASSWORD=123;DATABASE=dbTest"
        'constr="Provider=SQLOLEDB;Data Source=towin;Initial Catalog=dbTest; User ID=Ricky;Password=123"
        'Application("strConn")=constr
        err.Clear 
        set con=server.CreateObject ("adodb.connection")
        con.Open constr
        if err <> 0 then
            Response.Write "数据库连接不正确!"
        end if
        con.Close 
        set con=nothing
    %>我用了以下的代码,得出了错误信息
    ****************************
    Error!
         Code=80004005
         Code meaning=未指定的错误
         Source=Microft OLE DB Provider for SQL Server
         Desciption=不能装载通讯模块。驱动程序安装不正确。
    **************************** AfxOleInit();///初始化COM库
        _ConnectionPtr m_pConnection;
    //  _RecordsetPtr m_pRecordset;
    ////////////连接数据库//////////////
    HRESULT hr;
    try {
    hr = m_pConnection.CreateInstance("ADODB.Connection");///创建Connection对象
    if(SUCCEEDED(hr)) {
    //accss可以
    //hr = m_pConnection->Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=dbTest.mdb","","",adModeUnknown);///连接数据库
    //sql server就是不行,真搞不懂.....:(
    hr = m_pConnection->Open("Provider=SQLOLEDB;Data Source=towin;Initial Catalog=dbTest; User ID=Ricky;Password=123","","",adModeUnknown);///连接数据库
    PlayText("正确");
    }
    }
    catch(_com_error  &e)
    {  
               CString  ErrorStr;  
                 
               _bstr_t  bstrSource(e.Source());  
               _bstr_t  bstrDescription(e.Description());  
               ErrorStr.Format(    "Error!\n\tCode  =  %08lx\n\tCode  meaning  =  %s\n\tSource  =  %s\n\tDescription  =  %s\n  ",  
                           e.Error(),  e.ErrorMessage(),  (LPCSTR)bstrSource,  (LPCSTR)bstrDescription  );  
                 
               #ifdef  _DEBUG  
                           AfxMessageBox(  ErrorStr,  MB_OK    |  MB_ICONERROR  );  
               #endif              
    }