2022年ADO访问数据库大全(很完整详细[定 .pdf
《2022年ADO访问数据库大全(很完整详细[定 .pdf》由会员分享,可在线阅读,更多相关《2022年ADO访问数据库大全(很完整详细[定 .pdf(20页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、关键字ADO 访问数据库大全(很完整详细)原作者姓名相生昌介绍VC 用 ADO 访问数据库全攻略,介绍了 VC 用 ADO 来访问数据库的各个对象及各方法,很经典,也很实用,很值得一看。正文一、 ADO 概述ADO 是 Microsoft为最新和最强大的数据访问范例OLE DB 而设计的,是一个便于使用的应用程序层接口。ADO 使您能够编写应用程序以通过OLE. DB 提供者访问和操作数据库服务器中的数据。 ADO 最主要的优点是易于使用、速度快、内存支出少和磁盘遗迹小。ADO 在关键的应用方案中使用最少的网络流量,并且在前端和数据源之间使用最少的层数,所有这些都是为了提供轻量、高性能的接口。
2、之所以称为ADO ,是用了一个比较熟悉的暗喻,OLE 自动化接口。OLE DB 是一组 ” 组件对象模型 ”(COM) 接口,是新的数据库低层接口,它封装了ODBC 的功能,并以统一的方式访问存储在不同信息源中的数据。OLE DB 是 Microsoft UDA(Universal Data Access)策略的技术基础。 OLE DB 为任何数据源峁烁咝阅艿姆梦剩庑菰窗叵岛头枪叵凳菘狻缱佑始臀募低场谋竞屯夹巍远逡滴穸韵蟮鹊取 R 簿褪撬担琌LE DB 并不局限于ISAM 、Jet 甚至关系数据源,它能够处理任何类型的数据, 而不考虑它们的格式和存储方法。在实际应用中, 这种多样性意味着可以访
3、问驻留在 Excel 电子数据表、文本文件、电子邮件/目录服务甚至邮件服务器,诸如Microsoft Exchange 中的数据。但是,OLE DB 应用程序编程接口的目的是为各种应用程序提供最佳的功能,它并不符合简单化的要求。您需要的 API 应该是一座连接应用程序和OLE DB 的桥梁,这就是ActiveX Data Objects (ADO)。二、在 VC 中使用 ADO( 开发步骤好下:) 1、引入 ADO 库文件使用 ADO 前必须在工程的stdafx.h 头文件里用直接引入符号#import 引入 ADO 库文件 ,以使编译器能正确编译。代码如下所示:用#import引入 ADO
4、库文件#import c:program filescommon filessystemadomsado15.dllno_namespaces rename(EOF adoEOF) 这行语句声明在工程中使用ADO ,但不使用ADO 的名字空间,并且为了避免常数冲突,将常数 EOF 改名为 adoEOF 。现在不需添加另外的头文件,就可以使用ADO 接口了。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 20 页 - - - - - - - - - 2、初始化 OLE/CO
5、M库环境必须注意的是, ADO 库是一组COM 动态库, 这意味应用程序在调用ADO 前,必须初始化OLE/COM 库环境。在 MFC 应用程序里,一个比较好的方法是在应用程序主类的InitInstance成员函数里初始化OLE/COM库环境。BOOL CMyAdoTestApp: InitInstance() if(!AfxOleInit()/这就是初始化COM 库 AfxMessageBox( “OLE 初始化出错 ! ”); return FALSE; 3、ADO 接口简介ADO 库包含三个基本接口:_ConnectionPtr接口、 _CommandPtr接口和 _RecordsetP
6、tr接口。_ConnectionPtr接口返回一个记录集或一个空指针。通常使用它来创建一个数据连接或执行一条不返回任何结果的SQL 语句,如一个存储过程。使用_ConnectionPtr接口返回一个记录集不是一个好的使用方法。对于要返回记录的操作通常用_RecordserPtr来实现。而用_ConnectionPtr操作时要想得到记录条数得遍历所有记录,而用_RecordserPtr时不需要。_CommandPtr接口返回一个记录集。它提供了一种简单的方法来执行返回记录集的存储过程和 SQL 语句。在使用 _CommandPtr接口时,你可以利用全局_ConnectionPtr接口,也可以在
7、_CommandPtr接口里直接使用连接串。如果你只执行一次或几次数据访问操作,后者是比较好的选择。但如果你要频繁访问数据库,并要返回很多记录集,那么,你应该使用全局 _ConnectionPtr接口创建一个数据连接,然后使用 _CommandPtr接口执行存储过程和SQL 语句。_RecordsetPtr是一个记录集对象。与以上两种对象相比,它对记录集提供了更多的控制功能,如记录锁定,游标控制等。同_CommandPtr接口一样,它不一定要使用一个已经创建的数据连接,可以用一个连接串代替连接指针赋给_RecordsetPtr的 connection成员变量,让它自己创建数据连接。如果你要使用
8、多个记录集,最好的方法是同Command对象一样使用已经创建了数据连接的全局_ConnectionPtr接口,然后使用 _RecordsetPtr执行存储过程和SQL 语句。4、使用 _ConnectionPtr接口名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 20 页 - - - - - - - - - _ConnectionPtr主要是一个连接接口,取得与数据库的连接。它的连接字符串可以是自己直接写,也可以指向一个ODBC DSN 。_ConnectionPtr p
9、Conn; if (FAILED(pConn.CreateInstance(ADODB.Connection) AfxMessageBox(Create Instance failed!); return; CString strSRC; strSRC=Driver=SQL Server;Server=; strSRC+=suppersoft; strSRC+=;Database=; strSRC+=mydb; strSRC+=;UID=SA;PWD=; CString strSQL = Insert into student(no,name,sex,address) values(3,aaa
10、,male,beijing); _variant_t varSRC(strSRC); _variant_t varSQL(strSQL); _bstr_t bstrSRC(strSRC); if (FAILED(pConn-Open(bstrSRC,-1) AfxMessageBox(Can not open Database!); pConn.Release(); return; COleVariant vtOptional(long)DISP_E_PARAMNOTFOUND,VT_ERROR); pConn-Execute(_bstr_t(strSQL),&vtOptional,-1);
11、pConn.Release(); AfxMessageBox(ok!); 5、使用 _RecordsetPtr接口 (以连接 SQL Server为例 ) _RecordsetPtr pPtr; if (FAILED(pPtr.CreateInstance(ADODB.Recordset) 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 20 页 - - - - - - - - - AfxMessageBox(Create Instance failed!); retur
12、n FALSE; CString strSRC; strSRC=Driver=SQL Server;Server=; strSRC+=210.46.141.145; strSRC+=;Database=; strSRC+=mydb; strSRC+=;UID=sa;PWD=; strSRC+=sa; CString strSQL = select id,name,gender,address from personal; _variant_t varSRC(strSRC); _variant_t varSQL(strSQL); if(FAILED(pPtr-Open(varSQL,varSRC
13、,adOpenStatic,adLockOptimistic,adCmdText) AfxMessageBox(Open table failed!); pPtr.Release(); return FALSE; while(!pPtr-GetadoEOF() _variant_t varNo; _variant_t varName; _variant_t varSex; _variant_t varAddress; varNo = pPtr-GetCollect (id); varName = pPtr-GetCollect (name); varSex = pPtr-GetCollect
14、(gender); varAddress = pPtr-GetCollect (address); CString strNo =(char *)_bstr_t(varNo); CString strName =(char *)_bstr_t(varName); CString strSex =(char *)_bstr_t(varSex); CString strAddress =(char *)_bstr_t(varAddress); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - -
15、第 4 页,共 20 页 - - - - - - - - - strNo.TrimRight(); strName.TrimRight(); strSex.TrimRight(); strAddress.TrimRight(); int nCount = m_list.GetItemCount(); int nItem = m_list.InsertItem (nCount,_T(); m_list.SetItemText (nItem,0,strNo); m_list.SetItemText (nItem,1,strName); m_list.SetItemText (nItem,2,str
16、Sex); m_list.SetItemText (nItem,3,strAddress); pPtr-MoveNext(); pPtr-Close(); pPtr.Release(); 6、使用 _CommandPtr接口_CommandPtr接口返回一个Recordset对象,并且提供了更多的记录集控制功能,以下代码示例了使用 _CommandPtr接口的方法:代码 11: 使用 _CommandPtr接口获取数据_CommandPtr pCommand; _RecordsetPtr pRs; pCommand.CreateInstance(_uuidof(Command); pComma
17、nd-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); 6、关于数据类型转换由于COM 对象是跨平台的,它使用了一种通用的
18、方法来处理各种类型的数据,因此 Cstring 类和 COM 对象是不兼容的,我们需要一组API 来转换 COM 对象和C+ 类型的数据。 _vatiant_t和_bstr_t就是这样两种对象。它们提供了通用的方法转换 COM 对象和 C+ 类型的数据。vc 连接数据库名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 20 页 - - - - - - - - - 1.ACCESS 2000 _ConnectionPtr m_pConn; CString m_sConn=Pr
19、ovider=Microsoft.Jet.OLEDB.4.0.1;Data Source=d:db1.mdb; m_pConn.CreateInstance(ADODB.Connection); try HRESULT hr=m_pConn-Open(_bstr_t)m_sConn,adConnectUnspecified); if (FAILED(hr) AfxMessageBox(不能连接数据库source!); return FALSE; catch(_com_error e) AfxMessageBox(不能连接数据库error!); return FALSE; 2.SQL Serve
20、r 2000 _ConnectionPtr m_pConn; CString m_sConn=Provider=SQLOLEDB.1;Data Source=192.168.3.9;Initial Catalog=sode; /sode是数据库服务器192.168.3.9上的一个数据库 m_pConn.CreateInstance(ADODB.Connection); try HRESULT hr=m_pConn-Open(_bstr_t)m_sConn,sa,mapper,adConnectUnspecified); if (FAILED(hr) AfxMessageBox(不能连接数据库s
21、ource!); return FALSE; catch(_com_error e) AfxMessageBox(不能连接数据库error!); return FALSE; 3.Oracle 9i 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 6 页,共 20 页 - - - - - - - - - _ConnectionPtr m_pConn; CString m_sConn=Provider=MSDAORA.1;Data Source=sode_192.168.3.9; /使用
22、ms 连接库, sode 为 SID,192.168.3.9为机器 ip m_pConn.CreateInstance(ADODB.Connection); try HRESULT hr=m_pConn-Open(_bstr_t)m_sConn,sodeUser,sodePw,adConnectUnspecified); if (FAILED(hr) AfxMessageBox(不能连接数据库source!); return FALSE; catch(_com_error e) AfxMessageBox(不能打开数据库error!); return FALSE; = / 定义变量public
23、: /添加一个指向Connection对象的指针 : _ConnectionPtr m_pConnection; /添加一个指向Recordset对象的指针 : _RecordsetPtr m_pRecordset; / 定义方法/ 初始化 连接数据库void CAdoConn:OnInitADOConn() / 初始化 OLE/COM库环境:CoInitialize(NULL); try / 创建 Connection对象m_pConnection.CreateInstance(ADODB.Connection); / 设置连接字符串,必须是BSTR 型或者 _bstr_t 类型_bstr_
24、t strConnect = Provider=SQLOLEDB; Server=localhost;Database=HrSys; uid=sa; pwd=sa; m_pConnection-Open(strConnect,adModeUnknown); / 捕捉异常catch(_com_error e) 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 7 页,共 20 页 - - - - - - - - - / 显示错误信息AfxMessageBox(e.Description(
25、); / 执行查询_RecordsetPtr& CAdoConn: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,adCmdT
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 2022年ADO访问数据库大全很完整详细定 2022 ADO 访问 数据库 大全 完整 详细
限制150内