ADO数据访问技术

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

ADO数据访问技术摘自《VisualC+++SQLServer数据库应用实例完全解析》启明工作室编著,人民邮电出版社出版,2006年4月第一版。ADO的全称是ActiveXDataObjects。VisualC++提供了丰富的数据库访问技术,如ADO、ODBC、DAO和RDO等,其中,ADO是最新的数据库访问技术,它是使用更为简单,而又更加灵活的对象模型。对于新工程,应该使用ADO作为数据访问接口。1.ADO数据模型Figure6.ADOObjectModelADO提供执行以下操作的方式:连接到数据源。指定访问数据源的命令,同时可带变量参数或优化执行。通常涉及ADO的Command对象。执行命令,例如一个SELECT脚本。如果这个命令使数据库按表中行的形式返回,则将这些行存储在易于检查、操作或更改的缓存中。适当情况下,可以把缓存行的更改内容写回数据库中,更新数据源。提供常规方法检测错误(错误通常由建立连接或执行命令造成),涉及ADO的Error对象。ADO编程模型提供了以下主要元素:1)连接。通过“连接”可以从应用程序中访问数据源。连接时必须指定要连接到的数据源以及连接所使用的用户名和口令等信息。对象模型使用Connection对象完成连接功能。2)命令。可以通过已建立的连接发出命令,对数据源进行指定的操作。一般情况下,可以通过命令在数据源中添加、修改或删除数据,也可以检索满足指定条件的数据。在对象模型中使用Command对象来体现命令的概念。3)参数。在执行命令时可指定参数,参数可以在命令发布之前进行更改。例如,可以重复发出相同的数据检索命令,但是每一次指定的检索条件不同。对象模型用Parameter对象来体现参数概念。4)记录集。查询命令可以将查询结果存储在本地,这些数据以“行”为单位,返回市局的集合被称为记录集。对象模型将记录集体现为Recordset对象。5)字段。一个记录集行包含一个或多个字段。若将记录集看作二维网络,字段将排列起来构成列。每一个字段(列)都分别包含有名称、数据类型和值的属性,值中包含了来自数据源的真实数据。在对象模型中用Field对象体现字段。要修改数据源中的数据,可在记录集行中修改Field对象的值,对记录集的更改最终被传送给数据源。6)错误。错误可能在应用程序中随时发生,通常是由于无法建立连接、执行命令或对某些状态的对象进行操作所引起的。在对象模型中用Error对象体现错误。任何发出的错误都会产生一个或多个Error对象。7)属性。每个ADO对象都有一组唯一的“属性”来描述或控制对象的行为。属性有内置和动态两种类型。内置属性是ADO对象的一部分并且随时可用。动态属性则由特别的数据提供者添加到ADO对象的属性集合中,仅在提供者被使用时才能存在。在对象模型中用Property对象体现属性。8)集合。ADO集合时一种可方便地包含其他特殊对象的对象类型。使用集合方法可按名称(文本字符串)或序号(整型数)对集合中的对象进行检索。ADO支持四种类型的对象集合:a)Connection对象具有Errors集合,包含为响应与数据源有关的单一错误而创建的所有Error对象。b)Command对象具有Parameters集合,包含应用于Command对象的所有Parameter对象。c)Recordset对象具有Fields集合,包含Recordset对象中所有列的Field对象。d)Connection、Command、Recordset和Field对象都具有Properties集合,它包含各个对象的Property对象。2.常用ADO对象(1)在stdafx.h中加入import语句。需要用#import命令将ADO库文件导入到工程中,代码如下:#importC:\ProgramFiles\CommonFiles\System\ado\msado15.dllno_namespacerename(EOF,adoEOF)rename(BOF,adoBOF)支持ADO编程的库文件是msado15.dll,默认保存在C:\ProgramFiles\CommonFiles\System\ado目录下。(2)在主程序的初始化函数中,初始化COM库BOOLCADO2App::InitInstance(){AfxEnableControlContainer();AfxOleInit();//初始化COM库//--------------------------------------------}3.ADO简介ADO支持用于建立基于客户端/服务器和Web的应用程序的主要功能。其主要优点是易于使用、高速度、低内存支出和占用磁盘空间较少。ADO架构图表ADO主要对象介绍Connection对象–Connection对象用于建立与数据库的连接。通过连接可从应用程序访问数据源。它保存诸如指针类型、连接字符串、查询超时、连接超时和缺省数据库这样的连接信息。Command对象–Command对象定义了将对数据源执行的指定命令。Command对象可以在数据库中添加、删除或更新数据、或者在表中进行数据查询。返回的结果保存在Recordset对象中。Recordset对象–Recordset对象表示的是来自基本表或命令执行结果的记录全集。任何时候,Recordset对象所指的当前记录均为集合内的单个记录。使用ADO时,通过Recordset对象可对几乎所有数据进行操作。所有Recordset对象均使用记录(行)和字段(列)进行构造。在一个Connection对象上,可以同时打开多个Recordset。4.ADO主要对象介绍ADO对象包括:ConnectionObject(连接对象)、CommandObject(命令对象)、RecordSetObject(记录集对象)、FieldObject(字段对象)、RecordObject(记录对象)、ErrorObject(错误对象)、ParameterObject(参数对象)、PropertyObject(属性对象)和StreamObject(流对象)。其中,最为重要的是连接对象、命令对象和记录集对象。ConnectionObject代表了一个和数据源的连接,以后的数据库操作都是建立在这个连接上的。其与MFCODBC中创建数据源的连接的CDatabase数据库类非处相似,其他功能也非常相似。连接对象提供了对数据库的操作,但并不返回数据库操作之后的记录集。CommandObject用来处理数据库的一些操作,在某些方面具有和连接对象相同的功能,如都可以执行标准的SQL语句以及存储过程,不过命令对象可以返回带有记录集的结果。RecordsetObject代表了一个记录集,与MFCOBDC的CRecordset有些相似,用于访问记录集。记录集对象能方便地实现记录的添加、修改和删除操作。在使用这三个对象时,需定义与之对应的3个智能指针,分别为_ConnectionPtr,_CommandPtr和_RecordsetPtr,然后调用它们的CreateInstance方法进行实例化,从而创建这3个对象的实例。5._bstr_t和_variant_t类在使用ADO进行数据库开发时,_bstr_t和_variant_t两个类很有用,从而省去了BSTR和VARIANT类型转换的麻烦。COM编程不使用CString类,因为COM必须设计成跨平台,它需要一种更为普遍的方式来处理字符串以及其他数据类型,这就是BSTR和VARIANT类型的来历。_variant_t是一个类,封装了VARIANT的数据类型,并运行用户简单地对其进行强制类型转换。同样,_bstr_t是对BSTR进行封装的类。6.数据库的连接建立数据库的连接需要使用ConnectionObject。步骤如下:定义一个_ConnectionPtr类型的指针,代码如下:_ConnectionPtrm_pConnection;调用CreateInstance方法实例化:m_pConnection.CreateInstance(_uuidof(Connection));调用Connection对象的Open方法创建数据库的连接,Open的函数原型如下:HRESULTOpen(_bstr_tConnectionString,_bstr_tUserID,_bstr_tPassword,longOptions);其中,ConnectionString是一个包含连接信息的字符串,UserID是访问数据库的用户名,Password是访问数据库的密码,Options为可选参数。如果在ConnectionString中包含了数据库用户名和密码,UserID和Password值可以为空。示例程序之一:CStringstrSQL;HRESULThr;try{hr=m_pConnection.CreateInstance(__uuidof(Connection));m_pConnection-CursorLocation=adUseClient;strSQL=Provider=SQLOLEDB.1;IntegratedSecurity=SSPI;PersistSecurityInfo=False;InitialCatalog=TEST;DataSource=yjm;if(SUCCEEDED(hr)){hr=m_pConnection-Open(_bstr_t(strSQL),,,-1);}}catch(_com_errore)///捕捉异常{CStringerrormessage;errormessage.Format(连接数据库失败!\r\n错误信息:%s,e.ErrorMessage());AfxMessageBox(errormessage);///显示错误信息returnFALSE;}//AfxMessageBox(connected~~);其中,-----ADO连接SQLServer的数据库连接字符串模板----------身份验证模式为:sqlserver和windowsProvider=SQLOLEDB.1;PersistSecurityInfo=True;UserID=用户名;Password=密码;InitialCatalog=数据库名;DataSource=SQL服务器名身份验证模式为:仅windowsProvider=SQLOLEDB.1;IntegratedSecurity=SSPI;PersistSecurityInfo=False;InitialCatalog=数据库名;DataSource=SQL服务器名(终于搞明白这个ConnectionString是咋回事了。)数据源类型ConnectionString参数设置标准访问ODBC数据“Provider=MSDASQL;DSN=dsnName;UID=username;PWD=userPassword;”访问Oracle数据库“Provider=MSDAORA;DataSource=serverName;UserID=username;Password=userPassword;”访问MSSQL数据库“Provider=SQLOLEDB;DataSource=serverName;InitialCatalog=databaseName;UserID=username;PWD=userPassword;”访问ACCESS数据库“Provider=Microsoft.Jet.OLEDB.4.0;DataSource=databaseName;UserID=userName;Password=userPassword;”具体例子的代码如下:BOOLCTrade_MISApp::InitInstance(){AfxEnableControlContainer();//InitLoginCountm_iLoginCount=0;//CreateADOConnectionif(FAI

1 / 22
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功