在stdafx.h中添加了
#import "C:\Program Files\Common Files\System\ado\msado15.dll" no_namespace rename("EOF", "adoEOF")
在view.h中添加了
public:
_ConnectionPtr m_connection;
_RecordsetPtr m_recordset;
_CommandPtr m_command;
private:
CString m_strSource;
BOOL m_fConnected;代码如下: _bstr_t source("Driver={SQL Server};Server=D6172F39;Uid=Administrator;Pwd=12345678;Database=hh");
_bstr_t user("");
_bstr_t pwd(""); HRESULT hr;
try{

hr = m_connection.CreateInstance(_uuidof(Connection));
if(SUCCEEDED(hr))
hr = m_connection->Open(source, user, pwd, 16);
if(SUCCEEDED(hr))
hr = m_recordset.CreateInstance(_uuidof(Recordset));
if(SUCCEEDED(hr))
m_fConnected = TRUE;
else 
m_fConnected = FALSE;
}
catch (_com_error &e){
   MessageBox(e.ErrorMessage()); 
   m_fConnected = FALSE;
}
if(!m_fConnected) MessageBox("ADO数据源初始化失败!");
else  m_strSource = (const char * )source;调试的时候,在hr = m_connection.CreateInstance(_uuidof(Connection));这句hr好像是返回0。可是我自己建的hr返回的是个很大的负数。而且m_connection还是0x0000000,这是为什么?哪里不对?我用数据库的工具访问数据库都能访问。一点问题都没有。

解决方案 »

  1.   

    要初始化COM接口。把"_uuidof"改为"__uuidof"
      

  2.   

    怎么初始化COM接口?_uuidof 和 __uuidof 我都试过的,没什么效果啊。
      

  3.   

    我记得ADO的SQL DRIVER 是"SQLOLEDB.1"吧
    (".1"是版本号,可要可不要)
      

  4.   

    m_pConnection.CreateInstance(__uuidof(Connection))
    是两个下滑线. CString strConnect ="Provider=SQLOLEDB.1;Persist Security Info=False;User ID=sa;Initial Catalog=master;Data Source=HPSERVER";
    try
    {
    m_pConnection.CreateInstance(__uuidof(Connection));
    m_pConnection->Open((_bstr_t)strConnect,"","",adModeUnknown);
    }
      

  5.   

    也连不上啊,m_pConnection的地址还是0x00000000,createInstance的返回值还是0。
      

  6.   

    你不会没有OLE初始化吧? CoInitialize()与CoUninitialize()调用了没有?
      

  7.   

    在主程序的initInstance 里加入
    BOOL CMyDaExApp::InitInstance()
    {

    if (!AfxOleInit())
    {
    AfxMessageBox("ole 初始化错误");
    return FALSE;
    }
             AfxEnableControlContainer();
             ..............}
      

  8.   

    上面的 语句就是对ole的初始话!