hr=m_pConnection.CreateInstance(__uuidof(Connection));  
if(!SUCCEEDED(hr))   
{   
    printf("fail 1");  
}    hr=m_pRecordset.CreateInstance(__uuidof(Recordset)); 
if(!SUCCEEDED(hr))   
{   
printf("fail 2");  
}   
    


try     
{     
        hr=m_pConnection->Open(source,"","",16); 
if(S_OK!=hr)
printf("fail 3");
else
printf("success 1");
    }   
    catch(_com_error e)   
{   
        printf(e.ErrorMessage());          
}  
    
try
{
hr=m_pRecordset->Open("select * from test",m_pConnection.GetInterfacePtr(),adOpenDynamic,adLockOptimistic,adCmdText);
if(!SUCCEEDED(hr))
printf("fali 4");
else
printf("success 2");
}
catch(_com_error e)   
{   
        printf(e.ErrorMessage());  }  
1.怎么要用16呢?
2.我数据库连接成功了,但是open表的时候就提示未指定错误。。!怎么回事情呢?

解决方案 »

  1.   

    ado手册中connection对象的open方法说明:connection.Open ConnectionString, UserID, Password, Optionsoptions 可选,为enum值,有 adConnectUnspecified 和 adAsyncConnect
    前者对应值为 -1 后者对应值为 16
    -1表示连接模型未指定, 16表示异步方式打开连接,ConnectComplete 事件可以用来确定连接何时可用
    即,使用16时,连接成功并不代表连接可用,所以从表中查询时可能报错.改为-1试试. 一般都是用-1.  当然,也可以省略.