- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第七讲用ADO技术实现对数据库的查询操作
第七讲:用ADO技术实现对数据库的查询操作
上一讲我们已经学会了如何使用ADO中的Excute函数执行非查询的数据库操作,那么我们如何才能够实现在应用程序中执行SELECT查询操作,并且将数据库中查询到的结果返回到应用程序中好让我们使用C++进行操作呢?接下来让我们一起来看看吧!
【ADO实现查询操作的原理】
在上一讲中我们学习到可以通过Connection对象以及Command对象中的Excute函数执行SQL语句实现非查询的数据库操作。同样的,我们也可以使用Excute函数执行SQL实现查询的数据库操作。
当然这并不是重点所在,重点是我们使用SELECT语句对数据库进行查询之后将会得到查询结果,而这些查询结果是单纯的保存在数据库中的,应用程序不能够直接得到。那么如何才能够获得这些查询的数据呢?
在ADO技术中,我们通过Recordset(记录集)对象保存这些查询的数据,而这些数据将会通过Excute返回值的形式返回到记录集中。我们若想使用Recordset对象,就必须要使用与Recordset相关的智能指针类型。在C++中,使用_RecordsetPtr类型表示智能指针。
【_RecordsetPtr智能指针】
_RecordsetPtr智能指针是在ADO技术中使用的特殊的智能指针类型,它指向用于保存查询结果的Recordset对象。通常我们在执行SQL语句进行查询时,所返回的结果是一张表格(即使是一个单元格也一样),故此Recordset对象也采用表格的存储方式将数据库服务器中查询到的结果返回到应用程序中。
【实现查询操作的步骤】
Step1:建立可靠的数据库连接
Step2:通过Excute函数执行相关的SQL语句,并使用Recordset对象的智能指针对象接收Excute函数执行的返回值
Step3:通过_RecordsetPtr读取记录集中的内容
【获取记录集】
那么如何获取查询的记录集呢?其实很简单,我们只需要在执行查询时,使用一个_RecordsetPrt类型的智能指针对象接收Excute函数的返回值即可。代码如下:
Records = MyConnection-Execute(CommandString,Count,adCmdText);
其中Records是使用_RecordsetPtr定义的智能指针对象,CommandString是需要被执行的查询操作。
[例] 查询数据库中所有学生的信息,并接收结果集
#include iostream
#include afx.h
#include conio.h
#import C:\Program Files\Common Files\System\ado\msado15.dll no_namespace rename(EOF,adoEOF)
using namespace std;
void main()
{
_bstr_t ConnectionString = Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;User ID=sa;Initial Catalog=Student;Data Source=(local);//定义连接字符串
_bstr_t CommandString = select * from Student_INF;//定义命令字符串
_ConnectionPtr MyConnection;//定义连接指针
_RecordsetPtr Records = NULL;//定义记录集指针
_variant_t Count;//定义影响行数变量
//初始化COM编程环境
if(FAILED(::CoInitialize(NULL)))
{
cout初始化COM环境失败!endl;
getch();
return;
}
MyConnection.CreateInstance(_uuidof(Connection));//创建连接对象
Records.CreateInstance(_uuidof(Recordset));//创建记录集对象
MyConnection-ConnectionString = ConnectionString;//指定连接字符串
MyConnection-ConnectionTimeout = 10;//指定连接超时为10s
try
{
MyConnection-Open(,,,adConnectUnspecified);//打开连接
if(MyConnection-State == adStateOpen)
{
cout数据库
文档评论(0)