VC用ADO访问数据库全面总结
2008-07-01 11:23
381 查看
注:文中参考了不少大虾的成果,先表示感谢!
本文详细介绍了VC用ADO来访问数据库的各个对象及各方法。希望对大家有所帮助!!!
1、引入ADO库文件 使用ADO前必须在工程的stdafx.h头文件里用直接引入符号#import引入ADO库文件,以使编译器能正确编译。代码如下所示: 用#import引入ADO库文件
#import "c:/program files/common files/system/ado/msado15.dll"no_namespaces rename("EOF" adoEOF")
这行语句声明在工程中使用ADO,但不使用ADO的名字空间,并且为了避免常数冲突,将常数EOF改名为adoEOF。现在不需添加另外的头文件,就可以使用ADO接口了。 2、初始化OLE/COM库环境必须注意的是,ADO库是一组COM动态库,这意味应用程序在调用ADO前,必须初始化OLE/COM库环境。在MFC应用程序里,一个比较好的方法是在应用程序主类的InitInstance成员函数里初始化OLE/COM库环境。
3、ADO接口简介 ADO库包含三个基本接口:_ConnectionPtr接口、_CommandPtr接口和_RecordsetPtr接口。 _ConnectionPtr接口返回一个记录集或一个空指针。通常使用它来创建一个数据连接或执行一条不返回任何结果的SQL语句,如一个存储过程。使用_ConnectionPtr接口返回一个记录集不是一个好的使用方法。对于要返回记录的操作通常用_RecordserPtr来实现。而用_ConnectionPtr操作时要想得到记录条数得遍历所有记录,而用_RecordserPtr时不需要。 _CommandPtr接口返回一个记录集。它提供了一种简单的方法来执行返回记录集的存储过程和SQL语句。在使用_CommandPtr接口时,你可以利用全局_ConnectionPtr接口,也可以在_CommandPtr接口里直接使用连接串。如果你只执行一次或几次数据访问操作,后者是比较好的选择。但如果你要频繁访问数据库,并要返回很多记录集,那么,你应该使用全局_ConnectionPtr接口创建一个数据连接,然后使用_CommandPtr接口执行存储过程和SQL语句。 _RecordsetPtr是一个记录集对象。与以上两种对象相比,它对记录集提供了更多的控制功能,如记录锁定,游标控制等。同_CommandPtr接口一样,它不一定要使用一个已经创建的数据连接,可以用一个连接串代替连接指针赋给_RecordsetPtr的connection成员变量,让它自己创建数据连接。如果你要使用多个记录集,最好的方法是同Command对象一样使用已经创建了数据连接的全局_ConnectionPtr接口,然后使用_RecordsetPtr执行存储过程和SQL语句。
4、使用_ConnectionPtr接口 _ConnectionPtr主要是一个连接接口,取得与数据库的连接。它的连接字符串可以是自己直接写,也可以指向一个ODBC DSN。
5、使用_RecordsetPtr接口(以连接SQL Server为例)
6、使用_CommandPtr接口 _CommandPtr接口返回一个Recordset对象,并且提供了更多的记录集控制功能,以下代码示例了使用_CommandPtr接口的方法:
I 执行存储过程
II 执行一般的sql语句——使用_CommandPtr接口获取数据
差不多了,文章完毕
本文详细介绍了VC用ADO来访问数据库的各个对象及各方法。希望对大家有所帮助!!!
1、引入ADO库文件 使用ADO前必须在工程的stdafx.h头文件里用直接引入符号#import引入ADO库文件,以使编译器能正确编译。代码如下所示: 用#import引入ADO库文件
#import "c:/program files/common files/system/ado/msado15.dll"no_namespaces rename("EOF" adoEOF")
这行语句声明在工程中使用ADO,但不使用ADO的名字空间,并且为了避免常数冲突,将常数EOF改名为adoEOF。现在不需添加另外的头文件,就可以使用ADO接口了。 2、初始化OLE/COM库环境必须注意的是,ADO库是一组COM动态库,这意味应用程序在调用ADO前,必须初始化OLE/COM库环境。在MFC应用程序里,一个比较好的方法是在应用程序主类的InitInstance成员函数里初始化OLE/COM库环境。
void ADOConn::OnInitADOConn() { // 初始化OLE/COM库环境 ::CoInitialize(NULL); try { // 创建Connection对象 m_pConnection.CreateInstance("ADODB.Connection"); // 设置连接字符串,必须是BSTR型或者_bstr_t类型 _bstr_t strConnect = "Provider=SQLOLEDB; Server=CZ;Database=HrSys; uid=sa; pwd=sa;"; m_pConnection->Open(strConnect,"","",adModeUnknown); } // 捕捉异常 catch(_com_error e) { // 显示错误信息 AfxMessageBox(e.Description()); } }
3、ADO接口简介 ADO库包含三个基本接口:_ConnectionPtr接口、_CommandPtr接口和_RecordsetPtr接口。 _ConnectionPtr接口返回一个记录集或一个空指针。通常使用它来创建一个数据连接或执行一条不返回任何结果的SQL语句,如一个存储过程。使用_ConnectionPtr接口返回一个记录集不是一个好的使用方法。对于要返回记录的操作通常用_RecordserPtr来实现。而用_ConnectionPtr操作时要想得到记录条数得遍历所有记录,而用_RecordserPtr时不需要。 _CommandPtr接口返回一个记录集。它提供了一种简单的方法来执行返回记录集的存储过程和SQL语句。在使用_CommandPtr接口时,你可以利用全局_ConnectionPtr接口,也可以在_CommandPtr接口里直接使用连接串。如果你只执行一次或几次数据访问操作,后者是比较好的选择。但如果你要频繁访问数据库,并要返回很多记录集,那么,你应该使用全局_ConnectionPtr接口创建一个数据连接,然后使用_CommandPtr接口执行存储过程和SQL语句。 _RecordsetPtr是一个记录集对象。与以上两种对象相比,它对记录集提供了更多的控制功能,如记录锁定,游标控制等。同_CommandPtr接口一样,它不一定要使用一个已经创建的数据连接,可以用一个连接串代替连接指针赋给_RecordsetPtr的connection成员变量,让它自己创建数据连接。如果你要使用多个记录集,最好的方法是同Command对象一样使用已经创建了数据连接的全局_ConnectionPtr接口,然后使用_RecordsetPtr执行存储过程和SQL语句。
4、使用_ConnectionPtr接口 _ConnectionPtr主要是一个连接接口,取得与数据库的连接。它的连接字符串可以是自己直接写,也可以指向一个ODBC DSN。
5、使用_RecordsetPtr接口(以连接SQL Server为例)
try { // 创建Connection对象 m_pConnection.CreateInstance("ADODB.Connection"); // 设置连接字符串,必须是BSTR型或者_bstr_t类型 _bstr_t strConnect = "Provider=SQLOLEDB; Server=CZ;Database=HrSys; uid=sa; pwd=sa;"; m_pConnection->Open(strConnect,"","",adModeUnknown); } // 捕捉异常 catch(_com_error e) { // 显示错误信息 AfxMessageBox(e.Description()); }
_RecordsetPtr& ADOConn::GetRecordSet(_bstr_t bstrSQL) { try { // 连接数据库,如果Connection对象为空,则重新连接数据库 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; }
6、使用_CommandPtr接口 _CommandPtr接口返回一个Recordset对象,并且提供了更多的记录集控制功能,以下代码示例了使用_CommandPtr接口的方法:
I 执行存储过程
/********************************************************************** * 函数名称: //CustomerQueue_DB() * 功能描述: // 项表中写入客户进入客户列表并且开始排队的记录, * 访问的表: // * 修改的表: //T_WSP_ICSC_CustomerService * 输入参数: //cClientId(客户id) * 输出参数: // szBeginTime(客户进来排队时的时间) * 返 回 值: // 是否成功 * 其它说明: // 操作数据库 * 修改日期 版本号 修改人 修改内容 * ----------------------------------------------- * 2008/06/02 V1.0 陈志 XXXX ***********************************************************************/ bool CICSC_ACD::CustomerQueue_DB(const char * cClientId, char * szBeginTime) { _CommandPtr pCommand; //pCommand->CommandType=adCmdStoredProc; pCommand.CreateInstance(__uuidof(Command)); pCommand->ActiveConnection=m_pConnection;//_ConnectionPtr对象 // 创建记录集对象 pCommand->CommandText=_bstr_t("GetTime"); pCommand->Parameters->Append(pCommand->CreateParameter(_bstr_t("@RETURN_VALUE"), adInteger, adParamReturnValue, 0)); _RecordsetPtr pRecordset = pCommand->Execute(NULL, NULL, adCmdStoredProc); if (!pRecordset->adoEOF) { strcpy(szBeginTime, (char *)(_bstr_t)(pRecordset->Fields->GetItem(_variant_t("ServerTime"))->Value)); } else return false; if (pRecordset!=NULL) { pRecordset->Close(); } if (pCommand!=NULL) { pCommand.Detach(); } _CommandPtr pCommand2; pCommand2.CreateInstance(__uuidof(Command)); pCommand2->ActiveConnection=m_pConnection;//_ConnectionPtr对象 pCommand2->CommandText=_bstr_t("CustomerQueue"); //CustomerQueue // pCommand2->Parameters->Append(pCommand2->CreateParameter(_bstr_t("@RETURN_VALUE"), adInteger, adParamReturnValue, 0)); pCommand2->Parameters->Append(pCommand2->CreateParameter(_bstr_t("@w_c_id"),adVarChar,adParamInput, 15, _bstr_t(cClientId))); pCommand2->Parameters->Append(pCommand2->CreateParameter(_bstr_t("@BeginTime"),adVarChar,adParamInput, 20, _bstr_t(szBeginTime))); try { pCommand2->Execute(NULL, NULL, adCmdStoredProc); } catch(...) { return false; } if (pCommand2!=NULL) { pCommand2.Detach(); } return true; }
II 执行一般的sql语句——使用_CommandPtr接口获取数据
_CommandPtr pCommand; _RecordsetPtr pRs; pCommand.CreateInstance(__uuidof(Command)); pCommand->ActiveConnection=pConn; pCommand->CommandText="select * from student"; pCommand->CommandType=adCmdText; pCommand->Parameters->Refresh(); pRs=pCommand->Execute(NULL,NULL,adCmdUnknown); _variant_t varValue = pRs->GetCollect("name"); Cstring strValue=(char*)_bstr_t(varValue);
差不多了,文章完毕
相关文章推荐
- VC中利用ADO访问数据库的一个简单实例
- VC用ADO访问数据库全攻略
- vc 中 ado 访问数据库
- VC++ MFC SQL ADO数据库访问技术使用的基本步骤及方法
- VC++用ADO访问数据库全攻略
- VC编程中利用ADO方式访问SQL Server 2012数据库(1)- 连接数据库
- VC中使用ADO访问数据库技术程序实现方法
- VC++ MFC SQL ADO数据库访问技术使用的基本步骤及方法
- vc使用ADO操作数据库总结 (转)
- VC利用ADO组件来访问数据库的程序设计
- VC用ADO访问数据库全攻略
- VC用ADO访问数据库全攻略
- ADO数据库访问技术总结
- VC用ADO访问数据库全攻略
- VC利用ADO访问数据库
- VC中利用ADO访问数据库
- VC中使用ADO访问数据库技术程序实现方法
- VC用ADO访问数据库全攻略
- VC用ADO访问数据库全攻略
- VC用ADO访问数据库全攻略