想创建一个封装的ADO类,可在创建Connection实例时,一直不成功,总是显示失败,导致无效的指针,不知道为什么?
请各位大侠帮忙看看,。类的说明和实现分别贴上。
// 使用ADO技术的数据库功能封装类
class CADODB 
{
private:
    CString ConnectionString;
CString DsnName;
CString UserName;
CString UserPassword;
public:
CADODB();
virtual ~CADODB();
public:
// 返回记录个数
int nResultRow ;
// 返回结果集列数
int nResultCol;
// 查询返回结果 row*col
CStringArray pData;
// 错误信息
CString errorMessage;
    //  打开数据库联接
bool OpenDataBase();
// 执行select,结果放在pData中
int Select(CString Sql); // 执行无结果集的SQL语句,如insert, update, delete
int Execute(CString Sql);
    // 关闭数据库
bool CloseDataBase();
public:
// 定义ADODB.Connection对象的动态指针变量
_ConnectionPtr cn;
// 定义ADODB.Command对象的指针变量
_CommandPtr st;
// 定义ADODB.Recordset对象的指针变量
_RecordsetPtr rs;
};/ ADODB.cpp: implementation of the CADODB class.
//
//////////////////////////////////////////////////////////////////////#include "stdafx.h"
#include "CDMSV01.h"
#include "ADODB.h"#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif#include <iostream.h>//////////////////////////////////////////////////////////////////////
// Construction/Destruction
////////////////////////////////////////////////////////////////////////构造方法
CADODB::CADODB()
{ //初始化结果集行数和列数变量
nResultRow=0;
nResultCol=0;
//
cn=NULL;
    //
    //ConnectionString=="Provider=MSDASQL;DSN=cdms;UID=cdms;PWD=cdms";
DsnName="cdms";
UserName="cdms";
UserPassword="cdms"; ConnectionString="Provider=SQLOLEDB;Data Source=localhost;Initial Catalog=cdms;User ID=cdms;Password=cdms";
cout<<"初始化结束\n";}
//析构函数 主要任务完成数据库关闭
CADODB::~CADODB()
{
    if(cn)
{
cn->Close();
}
cn=NULL;
}
//打开数据库,取得数据库联接
bool CADODB::OpenDataBase()
{ //
bool result=0;
    
AfxOleInit();
//::CoInitialize(NULL);
cout<<"DB01\n";
HRESULT hr;
try
{
     // 创建ADO.Connection对象的实例
 hr=cn.CreateInstance("ADODB.Connection");
 
         if(SUCCEEDED(hr))
 {
             cout<<"创建实例成功\n";
 }
 else
 {
 cout<<"创建实例失败\n";  
         }
        
 cout<<"\n";
 cout<<"DB02\n";
 
 
     // 设置联接指针的ConnectionString属性
     //cn->ConnectionString=(_bstr_t)ConnectionString;
 //cn->ConnectionString="Provider=SQLOLEDB;Data Source=localhost;Initial Catalog=cdms;User ID=cdms;Password=cdms";
         cout<<"DB02\n";
         //
 //hr=cn->Open((_bstr_t)DsnName,(_bstr_t)UserName,(_bstr_t)UserPassword,adOpenUnspecified); 
 cn->Open((_bstr_t)ConnectionString,"","",adModeUnknown);
           
 cout<<"DB03\n";
         //打开数据库
     //cn->Open("","","",NULL);
 cout<<"DB04\n";
 result=1;
}
catch(_com_error &e)
{
         cout<<"数据库联接错误\n";
 
 CString errormessage;
         errormessage.Format("连接数据库失败!\r\n错误信息:%s",e.ErrorMessage());
         AfxMessageBox(errormessage);///显示错误信息  result=0;    } 
     //
return result;
}
//执行insert, update,delete语句的方法
int CADODB::Select(CString Sql)
{
    //
    cn->Execute((_bstr_t)Sql,NULL,adCmdText);
return 0;
}
//
int CADODB::Execute(CString Sql)
{
    return 0;
}
//
bool CADODB::CloseDataBase()
{
     if(cn)
 {
cn->Close();
 }
 return 1;
}