vc++6.0用ADO技术连接数据库的问题

麻烦帮我分析一下下面这段代码标//的地方,说明一下是什么意思或完成什么样的操作.谢谢!
class LRunSql
{
public:
LRunSql;
~LRunSql();
bool RunSQL(CString sql) //用CDatabase的Execute方法的返回值给m_recordset变量赋值
{ _bstr_t sql_=sql;
try{
m_recordset=m_database->Execute(sql_,NULL,adCmdText);
}
catch(_com_error& e)
{
ErrorsPtr pErrors=m_database->GetErrors();
if (pErrors->GetCount()==0)
{

afxDump<<e.ErrorMessage();
}
else
{
for (int i=0;i<pErrors->GetCount();i++)
{
_bstr_t desc=pErrors->GetItem((long)i)->GetDescription();
afxDump<<(char*)desc; //???
}
}
return false;

}
return true;

}
bool CheckSQLResult(CString sql); //此方法用来检查RunSQL方法是否执行成功
{
if(!this->RunSQL(sql))
return false;
else
{
if(!this->m_recordset->adoEOF) //???
return true;
else
return false;
}
return true;
}
public:
static _ConnectionPtr m_database;

static bool RollbackTrans();
static bool CommitTrans();
static bool BeginTrans()
{
return (!FAILED(m_database->BeginTrans())); //???

}
static bool Close();
static bool InitConnectPtr()
{
::CoInitializeEx(NULL,COINIT_APARTMENTTHREADED);
if(FAILED(m_database.CreateInstance(__uuidof(Connection))))
return false;
if(ConnectDataBase()==false)
{
::Sleep(1000); //???
if(ConnectDataBase()==false)
{
MessageBox(NULL,"系统试图自动为您配置ODBC,但由于一些原因没有完成,请手工配置!","系统提示",MB_OK|MB_ICONSTOP);
return false;
}
}
return true;
}
static bool ConnectDataBase() //此方法用来建立到数据库的连接 {
try{
m_database->Open(L"现代物流","","",-1);
}
catch(...)
{
::ShellExecute(NULL,"open","AutoConfig.exe",NULL,NULL,SW_HIDE); //???
return false;
}
return true;
}
_RecordsetPtr m_recordset;
};

第1个回答  2008-05-17
麻烦帮我分析一下下面这段代码标//的地方,说明一下是什么意思或完成什么样的操作.谢谢!
class LRunSql
{
public:
LRunSql;
~LRunSql();
bool RunSQL(CString sql) //执行sql语句,如果是查询的话结果会保存在m_recordset这个变量中
{ _bstr_t sql_=sql;
try{
m_recordset=m_database->Execute(sql_,NULL,adCmdText);
}
catch(_com_error& e)
{
ErrorsPtr pErrors=m_database->GetErrors();
if (pErrors->GetCount()==0)
{

afxDump<<e.ErrorMessage();
}
else
{
for (int i=0;i<pErrors->GetCount();i++)
{
_bstr_t desc=pErrors->GetItem((long)i)->GetDescription();
afxDump<<(char*)desc; //记录调试信息
}
}
return false;

}
return true;

}
bool CheckSQLResult(CString sql); //此方法用来检查RunSQL方法是否执行成功
{
if(!this->RunSQL(sql))
return false;
else
{
if(!this->m_recordset->adoEOF) //判断是否到了记录集的末尾
return true;
else
return false;
}
return true;
}
public:
static _ConnectionPtr m_database;

static bool RollbackTrans();
static bool CommitTrans();
static bool BeginTrans()
{
return (!FAILED(m_database->BeginTrans())); //开始事务处理

}
static bool Close();
static bool InitConnectPtr()
{
::CoInitializeEx(NULL,COINIT_APARTMENTTHREADED);
if(FAILED(m_database.CreateInstance(__uuidof(Connection))))
return false;
if(ConnectDataBase()==false)
{
::Sleep(1000); //连接数据库失败后暂停一秒再次连接
if(ConnectDataBase()==false)
{
MessageBox(NULL,"系统试图自动为您配置ODBC,但由于一些原因没有完成,请手工配置!","系统提示",MB_OK|MB_ICONSTOP);
return false;
}
}
return true;
}
static bool ConnectDataBase() //此方法用来建立到数据库的连接 {
try{
m_database->Open(L"现代物流","","",-1);
}
catch(...)
{
::ShellExecute(NULL,"open","AutoConfig.exe",NULL,NULL,SW_HIDE); //如果连接出现异常,则调用autoconfig.exe,应该是数据库参数设置的程序吧
return false;
}
return true;
}
_RecordsetPtr m_recordset;
};本回答被提问者采纳

VC++6.0与access数据库的连接
使用ADO连接数据库是通过Connection对象的Open方法实现的,语法是:Connection.Open Connectionstring.userID.password,openoptions 参数说明:Connectionstring:(可选)字符串,包含连接信息 userID:(可选)字符串,包含连接时所使用的用户名称 password:(可选)字符串,包含建立连接时多用密码 openoptions:(...

vc++ 6.0链接数据库 使用控件 registered activex controls 灾难性故障...
1.首先我们创建一个基于对话框的工程,工程名为ADOData。 2.在对话框中右键,选择插入activeX控件。3.在弹出的对话框中选择“Microsoft ADO Data Control,version 6.0 (DLEDB)”如图 然后确定。然后就可以看到在对话框中有了一个“Microsoft ADO Data Control,version 6.0 (DLEDB)”控件。但是我们...

Visual C++6.0在添加ADO控件时出现Microsoft ADO Data Control,versio...
第一是如何在VS 2005中注册ADO Data和DataGrid这两个用来显示数据库内容的控件。这在VC++ 6.0下非常方便,在"Project" --> "Add to Project" --> "Components and Controls" 中打开 "Components and Controls Gallery" 对话框,双击 "Registered ActiveX Controls" 目录就能找到这两个控件。也就是...

vc++ 用ADO链接数据库怎么连?
首先,要用#import语句来引用支持ADO的组件类型库(*.tlb),其中类型库可以作为可执行程序(DLL、EXE等)的一部分被定位在其自身程序中的附属资源里,如:被定位在msado15.dll的附属资源中,只需要直接用#import引用它既可。可以直接在Stdafx.h文件中加入下面语句来实现:import "c:\\program files\\common...

VC++中使用ADO操作ACCESS数据库
6、关闭记录集与连接记录集或连接都可以用Close()方法来关闭:m_pRecordset-Close();\/\/\/关闭记录集m_pConnection-Close();\/\/\/关闭连接至此,我想读者朋友已经熟悉了ADO操作数据库的大致流程,也许您已经胸有成竹,也许您还有点胡涂,不要紧!建议你尝试写几个例子,这样会更好地熟悉ADO,最后我给大家写了一个小例子,...

C++ Builder中怎么用ADO或BDE连接SQLite数据库
库文件的链接:VC++ 6.0直接在工具栏-生成-里面就有一个链接的 或者在文件中直接用这个语句 pragma comment(lib,“你想用的库文件.lib”)格式就是这样

win7环境下VC++6.0弹窗 Microsoft ADO Data Control 6.0 (SP6) (OLEDB...
你要把后缀.lnk去掉再点Insertt 比如你先选中那个插件,然后看Insert左边是不是有.lnk去掉再Insert

用VC++6.0弄学生成绩管理系统界面MFC,一运行界面就会出现“未发现数据源...
您好,这样的情况建议您下载最新版本的驱动精灵,或是直接在线升级一下驱动精灵。希望可以帮到您。

用vc++对access数据库操作要用什么头文件
VC连接access有两种方法。一种是通过ODBC,一种是通过ADO:1、如果用ADO的方法 应确保包含进了afxdao.h头文件,可以在StdAfx.h文件中包含它,如下:include <afxdao.h> \/\/加入DAO数据库支持MFC用下面代码:import "C:\/Program Files\/Common Files\/System\/ado\/msadox.dll" \/\/no_namespace \/\/...

VC++6.0中修改指定用户的密码?
\/\/m_ado连接到数据库的 CMyADO m_ado;m_ado.InitConnect();CString SQLstr;SQLstr.Format("SELECT * FROM userinfo WHERE 用户名='%s'",m_username);_RecordsetPtr rs=m_ado.ExectureSQL((_bstr_t)SQLstr);if(rs->adoEOF){ MessageBox("不存在用户!","系统提示");if(rs->GetState()=...

相似回答