友情提示:如果本网页打开太慢或显示不完整,请尝试鼠标右键“刷新”本网页!
富士康小说网 返回本书目录 加入书签 我的书架 我的书签 TXT全本下载 『收藏到我的浏览器』

VC语言6.0程序设计从入门到精通-第51部分

快捷操作: 按键盘上方向键 ← 或 → 可快速上下翻页 按键盘上的 Enter 键可回到本书目录页 按键盘上方向键 ↑ 可回到本页顶部! 如果本书没有阅读完,想下次继续接着阅读,可使用上方 "收藏到我的浏览器" 功能 和 "加入书签" 功能!





    1.数据查询  



    数据查询是数据库中最重要的操作,SQL 语句提供 SELECT 语句进行数据的查询,该语 

句具有灵活的使用方式和丰富的功能,其一般格式如下:  



    SELECT 'ALL | DISTINCT' 《 目标列表达式》 '; 《 目标列表达式》 ' …  



   FROM  ';  ' …  



    'WHERE '  



    'GROUP BY  HAVING  ''  



    'ORDER BY  'ASC | DESC''  



    整个 SELECT 语句的含义是,根据 WHERE 子句的条件表达式,从 FROM 子句指定的 

基本表或视图中找出满足条件的元组,再按 SELECT 子句中的目标列表达式,选出元组中的 

属性值形成结果表。如果有 GROUP 子句,则将结果按的值进行分组,该属性的列 



                                                                ·341 ·  


…………………………………………………………Page 353……………………………………………………………

Visual C++ 6。0 程序设计从入门到精通  



值相等的元组为一个组,每个组产生结果表中的一条记录。通常会在每组中作用集函数。如 

果 GROUP 子句带有 HAVING 短语,则只有满足指定条件的组才会输出 。如果有 ORDER 子 

句,则结果还要按进行排序,ASC 表示升序,DSEC 表示降序。下面举几个简单的 

例子(这里进行操作的数据库就是上节创建的数据库 )。 

                                                    

    (1)查询表 Contact 中的所有记录:  



    select * from Contact  



    (2 )查询所有人的姓名:  



    select Name from Contact  



    (3 )查询王明的电话和地址:  



    select Telephone; Address from Contact where Name=’王明’  



    (4 )将表 Personal 中所有人按年龄由小到大排序。  



    select * from Personal order by Birthday desc  



    2 .插入记录  



    插入记录使用的是 INSERT 语句,一般格式如下:  



    INSERT INTO  '( ';  '…)'  



    VALUES ( ';  ' …)  



    INSERT 语句的功能是将新元组插入指定表中,其中新记录属性列 1 的值为常量 1,属性 

列 2  的值为常量 2 ,依次类推。如果某些属性列在 INTO 子句中没有出现,则新记录在这些 

列上将取空值。不过需要注意的是,在表定义时说明了 NOT NULL  的属性列不能为空值,否 

则出错。下面是一个简单例子。  

    往表 Contact 中插入一条记录:  



    insert into Contact values(’11’; ’苏培’; ’62777098’; ’清华大学计算机系’)  



    3 .更新记录  



    更新记录通过 UPDATE 子句完成,一般格式如下:  



    UPDATE  SET  =  ';  =  ' …  



    'WHERE '  



    例如,如果要更改上面刚插入的记录,则语句如下:  



    update Contact set Name=’苏娟’; Telephone=’62788155’ where Name=’苏培’  



    4 .删除记录  



    SQL 中用 DELETE 子句实现删除记录的操作,一般格式如下:  



    DELETE FROM  'WHERE '  



    例如,如果要删除前面插入的记录,SQL 语句如下:  



    delete from Contact where ID=11  



12。3。3    关系数据库的联合查询技术  



    能够从多个表中选择和操作数据是 SQL 的特色之一,这又叫做联合查询技术,它包括联 



 ·342 ·  


…………………………………………………………Page 354……………………………………………………………

                                                     第 12 章    数据库开发  



合查询和连接查询。  



   1.联合查询  



   联合查询是通过 UNION 运算符实现的,它可以将多个 SELECT 语句的查询结果合并, 

使之作为一个结果集合显示(各结果集的数据类型要相同 )。UNION 的语法格式如下:  



   SELECT_STATEMENT  



   UNION 'ALL' SELECT_STATEMENT 'UNION 'ALL' SELECT_STATEMENT' …  



   例如,如果要显示出表 Contact 和表 Personal 中所有人的姓名,则 SQL 语句如下:  



   select Name from Contact union select Name from Personal  



   2 .连接查询  



   通过连接运算符可以实现多个表查询 。连接是关系数据库模型的主要特点,也是它区别 

于其他类型数据库管理系统的一个标志。  

   通常的连接语法格式为:  



   FROM JOIN_TABLE JOIN_TYPE JOIN_TABLE 'ON  (JOIN_CONDITION )'  



   其中,JOIN_TABLE 是连接操作的表名,JOIN_TYPE 是连接类型,它分为内连接、外连 

接和交叉连接 3 类。  



   (1)内连接  

    内连接(INNER JOIN )又分为等值连接、不等连接和自然连接 3 种。等值连接在连接条 

件中使用“= ”运算符比较被连接的列值,其查询结果中列出被连接表中的所有列,包括重 

复列;不等连接在连接条件中使用除“= ”之外的其他比较运算符;自然连接使用“= ”运算 

符比较被连接的列值,但查询结果中不包括重复列。  



   (2 )外连接  

   外连接分为左外连接(LEFT OUTER JOIN 或 LEFT JOIN )、右外连接(RIGHT OUTER  

JOIN 或 RIGHT JOIN )和全外连接(FULL OUTER JOIN 或 FULL JOIN )。与内连接不同的是, 

采用外连接时,返回到查询结果集合中的不仅包含符合连接条件的行,而且还包括左表(左 

外连接时)、右表(右外连接时)和两个表(全外连接时)中的所有数据行。  



   (3 )交叉连接  

   交叉连接(CROSS  JOIN )不带 WHERE 子句,返回被连接的两个表所有数据行的笛卡 

尔积。  



12。4    ADO 基础知识  



   在第 1 节中介绍了以前的几种 Visual C++连接数据库的技术。Visual C++虽然对数据库的 

支持很强大,功能也很全面,但是不管是先前的 ODBC 还是 DAO ,再到后来的 OLE  DB, 

用 Visual  C++来开发数据库总是很麻烦,特别是其中的数据转换令初学者十分头疼。不过, 

等到 ADO 技术开发出来以后,这些都变得容易了。  



                                                              ·343 ·  


…………………………………………………………Page 355……………………………………………………………

Visual C++ 6。0 程序设计从入门到精通  



12。4。1    ADO 的技术特点  



   ADO 的全称是 ActiveX  Data  Objects ,它是微软公司为数据库应用程序开发的新接口。 

ADO 基于 ,提供编程语言可利用的对象,它不仅面向 Visual  C++ ,同时还提供面向其 

他开发工具的应用,如 Visual Basic 、VJ 等,甚至还提供面向诸如 VBScript 、JavaScript 等脚 

本语言的应用。ADO 的底层是 OLE DB,不仅能访问关系型数据库,也能访问非关系型数据 

库。ADO 对 OLE DB 的包装是相当成功的,相对于 OLE DB 中众多的接口来说,ADO 对象 

模型简明扼要,没有一点多余的东西,并且其功能还要比  DAO  强大得多。并且可以说到目 

前为止,ADO 是目前最快的数据库访问的中间层。  



12。4。2    ADO 的结构  



   ADO 的结构如图 12…19 所示。从图中可以看出,ADO 模型包含了 7 个对象和 4 个集合。  



                                             



                           图 12…19    ADO 结构图  



   o  连接对象(Connection ):用于与数据源的连接,以及处理一些命令和事务。  

   o  命令对象(mand ):用于处理传递给数据源的命令。  

   o  记录集对象(Recordset ):用于处理数据的表格集,如获取和修改数据。  

   o  域对象(Field ):用于表示记录集中的列信息,包括列值以及其他信息。  

   o  参数对象(Parameter ):用于对传送给数据源的命令赋参数值。  

   o  属性对象(Property ):用于操作在 ADO 中使用的其他对象的详细属性。  

   o  错误对象(Error ):用于获得连接对象所发生的详细错误信息。  

   o  域集合(Fields ):记录集对象中包含了域对象的集合,域对象的集合中包含了所有代 

     表记录集中每列的域对象。  

   o  参数集合(Parameters ):命令对象中包含了参数对象的集合,参数集合中包含了应用 

     于命令对象的所有参数对象。  

   o  属性集合(Properties ):在连接对象、命令对象、记录集对象和域对象中都包含了属 

     性对象的集合,属性对象的集合中包含了这些对象的所有特性。  

   o  错误集合(Errors ):连接对象中包含了错误对象的集合,错误集合中包含了在一次连 

     接数据源时所产生的所有错误对象。  



 ·344 ·  


…………………………………………………………Page 356……………………………………………………………

                                                             第 12 章    数据库开发  



12。5    ADO 的对象和集合  



12。5。1    连接对象  



    连接对象即 Connection 对象,它代表与数据源之间的一个连接,其常用的方法和属性分 

别如表 12…2 和表 12…3 所示。  



    表 12…2                   连接对象的方法及其说明  



       方法                                     说明  

 Open              打开到数据源的连接  

 Execute           执行指定的查询、SQL 语句、存储过程或特定提供者的文本等内容  

 Close             关闭 Connection 对象,释放所有关联的系统资源  

 BeginTrans        启动新的事务  

 mitTrans       保存所有更改并结束当前事务,也可启动新事务  

 RollbackTrans     取消当前事务中所作的任何更改并结束事务,也可启动新事务  



    表 12…3                   连接对象的属性及其说明  



       属性                                     说明  

                   可以读写,其值可能为 AdXactmitRetaining 和 AdXactAbortRetaining  中任意 

 Attributes  

                   一个  

 ConnectionTimeout  指示在终止尝试和产生错误前建立连接期间需等待的时间  

 mandTimeout    指示在终止尝试和产生错误前执行命令期间需等待的时间  

 ConnectionString  包含用来建立到数据源的连接的信息  

 DefaultDatabase   指示 Connection 对象的默认连接数据库  

 IsolationLevel    设置 Connection 对象的隔离级别  

 Mode              设置或返回当前连接上提供者正在使用的访问权限  

 Provider          设置或返回连接提供者的名称  

 Version           返回 ADO 执行的版本号  



    利用此对象,用户可以进行以下一些操作:  

    o  在进行连接前,通过 ConnectionString、ConnectionTimeOut  和 Mode 属性来配置建立 

      连接的信息、建立连接的超时限制和访问模式。  

    o  通过 CursorLocation 属性支持批处理方式。  

    o  通过 DefaultDatabase 属性设置缺省的连接数据库。  

    o  通过 IsolationLevel 属性设置 Connection 对象的隔离级别。  

    o  通过 Provider 属性设置 OLE DB 的提供者。  

    o  通过 Open()和 Close()方法分别来建立和关闭与数据源的连接。  

    o  通过 Execute()方法来执行命令,通过 mandTimeout 属性设置执行命令超时的时限。  

    o  通过 BeginTrans() 、mitTrans()  和 RollbackTrans()方法以及 Attributes 属性进行事务 

      控制。  

    o  通过 Errors 集合检查数据源的错误信息。  

    o  通过 Version 属性得到 ADO 的版本信息。  

    o  通过 OpenSchema()方法来得到数据库的表信息。  



                                                                        ·345 ·  


…………………………………………………………Page 357……………………………………………………………

Visual C++ 6。0 程序设计从入门到精通  



12。5。2    命令对象  



    命令对象即 mand 对象,一个 mand 对象代表一个对数据源执行的命令,利用此 

对象可以进行数据库的一些操作,比如查询、修改等。  

    mand 对象的主要方法和属性如表 12…4 及表 12…5 所示。  



    表 12…4                  命令对象的方法及其说明  



        方法                                  说明  

 Execute            执行在 mandText 属性中指定的查询、SQL 语句或存储过程  

 CreateParameter    用指定的名称、类型、方向、大小和值创建新的 Parameter 对象,在参数中传 

                    送的所有值都将写入相应的 Parameter 属性  

 Cancel             终止执行异步 Execute()方法调用  



    表 12…5                  命令对象的属性及其说明  



        属性                                  说明  

 mandText        设置或返回 mand 对象的文本。通常该对象为 SQL 语句  

 mandTimeout     指示在终止尝试和产生错误之前执行命令期间需等待的时间  

 mandType        指定命令类型,可以是文本命令、表格名或者是一个存储过程  

 ActiveConnection   指示指定的 mand 对象当前所属的 Connection 对象  

 State              随时使用 State 属性确定指定对象的当前状态  

 Prepared           指示执行前是否保存命令的编译版本  



    利用 mand 对象的一些方法和属性,用户可以进行以下一些操作:  

    o  通过 mandText 属性设置命令串。  

    o  通过 Parameter 对象和 Parameters 集合定义参数化查询或存储过程的参数。  

    o  通过 Execute()方法执行一个命令,并返回一个 Recordset 对象。  

    o  在执行命令前,通过 mandType 属性设置 mand 对象的类型,以达到优化性能 

      的目的。  

    o  在执行命令前,通过 Prepared 属性来设置底层提供者是否为当前命令保存一个编译过 

      的版本。如果现在保存,则以后再执行时,速度会加快。  

    o  通过 mandTimeout 属性设置执行命令的超时时限。  

    o  通过 ActiveConnection 属性来指定该命令对象所属的连接(Connection )。  

    o  通过 Name 属性来指定该命令对象作为其所属连接的一个方法,以便以后可以在相应 

     Connection 对象上通过 Name 属性指定的名称来执行命令。  

    o  通过 Source 属性将 mand 对象传递给 Recordset 来得到数据。  

    o  通过 Properties 集合来访问提供者指定的属性。  



12。5。3    记录集对象  



    记录集对象即  Recordset  对象,它表示一个从数据源选择的一组纪录的集合,其主要方 

法和属性如表 12…6 及表 12…7 所示。  



    表 12…6                 记录集对象的方法及其说明  



      方法                                  说明  

 MoveFirst      移动到记录集的第一条记录处  

 MoveLast       移动到记录集的最后一条记录处  



 ·346 ·  


…………………………………………………………Page 358……………………………………………………………

                                                              第 12 章    数据库开发  



                                                                       续表  



       方法                                    说明  

 MovePrevious    移动到记录集中当前记录的前一条记录处  

 MoveNext        移动到记录集中当前记录的后一条记录处  

 Move            移动到指定的记录  

 NextRecordset   返回复合命令语句中下一条命令的结果,或返回多个结果的已存储过程结果  

 Open            直接打开一个记录集,而不是作为执行命令或连接命令产生的记录集  

 Close           关闭记录集  

 Delete          删除记录集中的当前记录  

 Update          将当前对记录集的改动保存到数据源中  

 UpdateBatch     对更新命令进行批处理 。它对记录集的变化进行缓存,直到调用此方法对变化进行 

                 批量更新  

 CancelUpdate    取消 Update 更新前所作的改动  

 CancelBatch     取消数据源中为提交的批量改动  

 GetRows         获得记录集中的多行数据,并将获得的数据写入数组中  

 Requery         重新执行以前执行过的命令,重新获得记录集  

 Support         判断某一特定的记录集对象是否支持特定的属性和方法  

 Clone           产生一个记录集对象,其中包含记录集对象的所有数据  



    表 12…7                   记录集对象的属性及其说明  



       属性                                    说明  

 AbsolutePage    指定当前记录所在的页  

 AbsolutePosition  根据其在 Recordset 中的序号位置移动到记录,或确定当前记录的序号位置  

 ActiveConnection  指定 Recordset 对象当前所属的 Connection 对象  

 BOF             指示当前记录位置是否位于 Recordset 对象的第一个记录之前  

 EOF             指示当前记录位置是否位于 Recordset 对象的最后一个记录之后  

 Bookmark        返回惟一标识 Recordset 对象中当前记录的书签,或者将 Recordset 对象的当前记录 

                 设置为由有效书签所标识的记录  

 CacheSize       控制提供者在缓存中所保存的记录的数目,并可控制一次恢复到本地内存的记录数 

                     

                  目 

 CursorType      获得或设置当前光标的类型  

 EditMode        获得当前的编辑状态  

 Filter          指定一个在行集中移动时所使用的过滤器  

 LockType        得到或设置当前的访问状态  

 MaxRecord       获得或设置一次操作中的 Recordset 对象中所返回的最大行的数目  

 PageCount       获得记录集中使用的页数  

 PageSize        获得或指定一页中的行数  

 RecordCount     获得记录集中包含的记录的数目  

 Source          获得记录集中记录的来源,可以是一个命令对象、SQL 语句、存储的过程或表名  

 Status          返回当前行的状态  



12。5。4    ADO 的其他对象  



    除了前面介绍的 3 个重要对象,ADO 还包括域对象 Field 、参数对象 Parameter 、属性对 

象 Property 和错误对象 Error 。  



    1.域对象  



    Field 对象代表使用普通数据类型的数据列,它的常用方法和属性分别如表 12…8 和表 12…9 



                                                                        ·347 ·  


…………………………………………………………Page 359……………………………………………………………

Visual C++ 6。0 程序设计从入门到精通  
返回目录 上一页 下一页 回到顶部 0 0
快捷操作: 按键盘上方向键 ← 或 → 可快速上下翻页 按键盘上的 Enter 键可回到本书目录页 按键盘上方向键 ↑ 可回到本页顶部!
温馨提示: 温看小说的同时发表评论,说出自己的看法和其它小伙伴们分享也不错哦!发表书评还可以获得积分和经验奖励,认真写原创书评 被采纳为精评可以获得大量金币、积分和经验奖励哦!