类的定义:#import "C:\Program Files\Common Files\System\ado\msado15.dll" no_namespace rename("EOF","adoEOF")class ADOConn  
{
public:
_ConnectionPtr m_pConnection;
_RecordsetPtr m_pRecordset;public:
ADOConn();
virtual ~ADOConn(); void OnInitADOConn();
_RecordsetPtr& GetRecordSet(_bstr_t bstrSQL);
BOOL ExecuteSQL(_bstr_t bstrSQL);
void ExitConnect();};
类的实现:
ADOConn::ADOConn()
{}ADOConn::~ADOConn()
{}void ADOConn::OnInitADOConn()
{
::CoInitialize(NULL);

try
{
m_pConnection.CreateInstance(__uuidof(Connection));
AfxMessageBox("kk");
//_bstr_t strConnect="Provider=SQLOLEDB.1;Password=woshiab;Persist Security Info=True;User ID=sa;Initial Catalog=guzhen;Data Source=134.66.226.189,1433";
//_bstr_t strConnect="Provider=SQLOLEDB.1;Password=woshiab;Persist Security Info=True;User ID=sa;Initial Catalog=guzhen;Data Source=134.71.203.230,1433";
_bstr_t strConnect="Provider=SQLOLEDB.1;Password=woshiab;Persist Security Info=True;User ID=sa;Initial Catalog=guzhen;Data Source=134.66.226.189,1433";
AfxMessageBox("kk2");
m_pConnection->Open(strConnect,"","",adModeUnknown);
AfxMessageBox("kk3");
} catch(_com_error e)
{

AfxMessageBox(e.Description());
AfxMessageBox(e.ErrorMessage());
}
}
_RecordsetPtr& ADOConn::GetRecordSet(_bstr_t bstrSQL)
{
try
{
if(m_pConnection==NULL)
OnInitADOConn();
m_pRecordset.CreateInstance(__uuidof(Recordset));
m_pRecordset->Open(bstrSQL,m_pConnection.GetInterfacePtr(),
adOpenDynamic,adLockOptimistic,adCmdText);
}
catch(_com_error e)
{
AfxMessageBox(e.Description());
} return m_pRecordset;
}BOOL ADOConn::ExecuteSQL(_bstr_t bstrSQL)
{
try
{
if(m_pConnection==NULL)
OnInitADOConn();
m_pConnection->Execute(bstrSQL,NULL,adCmdText);

return true;
} catch(_com_error e)
{
AfxMessageBox(e.Description());
return false;
}
}void ADOConn::ExitConnect()
{
if(m_pRecordset!=NULL)
m_pRecordset->Close(); m_pConnection->Close(); ::CoUninitialize();
}
但是在定义一个ADOCONN对象后,进行OnInitADOConn(),catch提示“无效指针”,真的搞不清楚是怎么回事,高手请给指点一下!多谢!如果100分不够,我可以在另开贴在加,多谢!

解决方案 »

  1.   

    _bstr_t strCnn("Provider=sqloledb;Data Source=MyServer;Initial Catalog=pubs;User Id=sa;Password=;");
      

  2.   

    谢谢楼上的提示,但是感觉到提示“无效指针”,是否建立connection对象不成功呀?!期待ing !
      

  3.   

    无效的指针,表明在调用m_pConnection->Open的时候已经出了错。检查下你的m_pConnection是否正确创建了实例。
      

  4.   

    //在"stdafx.h"中 加入ADO支持库
    #import "c:\program files\common files\system\ado\msado15.dll" \
    no_namespace \
    rename ("EOF", "adoEOF")   //在APP初始化COM,创建ADO连接等操作
    AfxOleInit();
    m_pConnection.CreateInstance(__uuidof(Connection));
    char buf[200];
    注意:
    SQL Server 数据库的连接方式
    sprintf(buf,"Driver={SQL Server};Server=%s;Option=3;DATABASE=%s;UID=sa;PWD=%s;","IP","数据库","密码");//在ADO操作中建议语句中要常用try...catch()来捕获错误信息,
    //因为它有时会经常出现一些想不到的错误
    try                 
    {
    m_pConnection->Open(buf,"","",adModeUnknown);
    //return TRUE;
    }
    catch(_com_error e)
    {
    AfxMessageBox("数据库连接失败!");
    return FALSE;
    }