日期:2014-05-18  浏览次数:20467 次

vc中应用ado的_ConnectionPtr连接sql2005数据库求解!!
建立一个类用来连接数据库

class CDataManage  
{
public:
CDataManage();
virtual ~CDataManage();
public:
_RecordsetPtr Record1;
protected:
_ConnectionPtr DataConn;
_RecordsetPtr DataRecord;

  public:
  _ConnectionPtr GetConn();//获取adoConnection对象
  _RecordsetPtr GetRecordset();//获取adoRecordset对象
  bool ConnectDatabase(CString constr); //连接数据库
  bool ExecSQL(CString sql);
  };
CDataManage::CDataManage()
{
DataConn.CreateInstance(_uuidof(Connection)); //????
DataRecord.CreateInstance(_uuidof(Recordset));
Record1.CreateInstance(_uuidof(Recordset));
}

CDataManage::~CDataManage()
{
DataConn->Release();
DataRecord->Release();
Record1->Release();
}

_ConnectionPtr CDataManage::GetConn() //返回数据成员的值
{
return DataConn; 
}

_RecordsetPtr CDataManage::GetRecordset() //返回数据成员的值
{
return (DataRecord);
}

bool CDataManage::ConnectDatabase(CString constr) //连接数据库
{
DataConn->ConnectionString = (_bstr_t)constr; //_ConnectionPtr对象
try
{
DataConn->Open("","","",-1);
}
catch(...)
{
return false;
}
return true;

}

bool CDataManage::ExecSQL(CString sql)
{
_bstr_t sqltext =sql;
try
{
DataConn->Execute(sqltext,NULL,adCmdText); //??
}
catch(_com_error& e)
{
AfxMessageBox(e.ErrorMessage(),0,0);
return false;
}
return true;
}

在另一个文件中应用这个类连接数据库
bool change;
datamanage = new CDataManage(); //定义一个用来连接数据库的类对象
 change= datamanage->ConnectDatabase("Provider=SQLOLEDB.1;Persist Security Info=False;User ID=sa;Initial Catalog=EquipmentManage;Data Source=.");
if (change==false)
{
AfxMessageBox("连接数据库初始化失败");
return 0;
}

求解!!为什么连接不上 哪里出错了

------解决方案--------------------
SQL code

---连不上,你得把错误提示给出来,才知道是那里的问题啊?
---DataConn->Open("","","",-1);????你确定open勒?

------解决方案--------------------
探讨
程序就是用变量change接收的返回值来判断的,
try
{
DataConn->Open("","","",-1);
}
catch(...)
{
return false;
}
return true;

}


连不上返回值应该是false吧,然后程序就执行
AfxMessageBox("连接数据库初始化失败");
出现提示框