已阅读5页,还剩57页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第16章ADO NET数据访问技术 在目前的主流软件开发中 信息管理或处理系统占据了主要方面 所以几乎所有平台都支持数据库访问技术 NET平台自然也不例外 ADO NET是 NET框架中的一个重要组件 以一种统一的访问方式来连接多种形式的数据源 其中最常见的就是关系型数据库 ADO NET采用相同的方法访问本地数据库 客户机 服务器数据库和基于Internet的高度分布式数据库 本章讲述 NET开发技术中应用非常广泛的核心开发技术 ADO NET数据访问技术 章节内容 16 1数据库开发基础16 2使用ADO NET16 3ADO NET综合应用16 4实例 图书信息管理 16 1数据库开发基础 16 1 1SQLServer2005SQLServer是一个全面的 集成的 端到端的数据解决方案 它为企业中的用户提供了一个安全 可靠和高效的平台 用于企业数据管理和商业智能应用 使用SQLServer2005创建数据库 首先建立数据库 之后添加表结构和为表添加列 最后可以直接为表添加数据 16 1 2SQL语句简介 SQL全称是结构化查询语言 StructuredQueryLanguage 是数据库中使用的标准数据查询语言 目前 绝大多数流行的关系型数据库管理系统都采用了SQL语言标准 虽然对SQL语句进行了再开发和扩展 但是包括Select Insert Update Delete Create以及Drop在内的标准的SQL命令仍然可以被用来完成几乎所有的数据库操作 Insert Insert操作用于向数据库表中插入记录 INSERTINTOtable column column VALUES columnvalue columnvalue 下面语句是向BookInfo表中插入一行记录 INSERTINTOBookInfoVALUES 9787040074949 数据库系统概论 萨师煊 高等教育出版社 28 0 2000 2 1 Select Select操作从一个或多个表中选取特定的行和列 因为查询和检索数据是数据库管理中最重要的功能 所以SELECT语句在SQL中是工作量最大的部分 SELECT语句的结果通常是生成另外一个表 SELECTcolumnsFROMtablesORDEREBYcolumn ASC DESC WHEREpredicates 下面语句将查询BookInfo表中作者谭浩强的书 SELECTNameFROMBookInfoWHEREAuthor 谭浩强 UPDATE UPDATE语句允许用户在已知的表中对现有的行进行修改 例如 下面语句是一个单行更新 UPDATEBookInfoSETName C语言程序设计 第三版 WHEREISBN 9787302108535 DELETE DELETE语句用来删除已知表中的行 如同UPDATE语句中一样 所有满足WHERE子句中条件的行都将被删除 由于SQL中没有UNDO语句或是 你确认删除吗 之类的警告 在执行这条语句时千万要小心 例如 下面语句将删除所有清华出版社的书的信息 DELETEFROMBookInfoWHEREpress 清华出版社 16 2使用ADO NET ADO NET目前版本为3 0 用于访问和操作数据的两个主要组件是 NETFramework数据提供程序和DataSet 16 2 1理解数据提供者 ADO NET用不同的数据提供者来操作不同数据源数据提供者实际上是ADO NET提供的一组封装好的类 用于操作不同类型的数据库系统 我们可以把这些数据提供者想象成我们程序与数据库之间的一座桥梁 我们的程序通过它和数据库打交道 4种数据提供者 SQLServer数据提供者 为操作SQLServer数据库 SQLServer7 0及之后版本 提供完善的支持 OLEDB数据提供者 为所有支持OLEDB驱动的数据源提供支持 它可以支持SQLServer7 0之前的版本 Oracle数据提供者 为操作Oracle数据库 8i及之后版本 提供完善的支持 ODBC数据提供者 为操作Access数据库及其他支持ODBC驱动的数据源提供支持 命名空间 我们需要根据所使用数据库系统的不同 选择相对应的数据提供者 并在代码中包含相应的命名空间 16 2 2连接数据库 ADO NET中使用Connection类完成数据库的连接 只有建立了连接之后 才能对数据库表中的记录进行添加 删除 修改 读取之类的功能 数据库连接字符串 要建立一个数据库连接 首先需要提供一个连接字符串 连接字符串的格式是一个以分号为界 划分键 值参数对的列表 这个串中包含了数据库的位置 想要连接的数据库的名称以及数据库的身份验证方式等众多的信息 必须提供的信息有以下3个 数据库所在服务器的位置 DataSource 数据库的名称 InitialCatalog 数据库的身份验证方式 Windows集成验证或者是SQLServer身份验证 下面是一个用于连接16 1 2节创建的SQLServer数据库VBNET2008的连接字符串 采用Windows集成验证的方式 DimconnectionStringAsString DataSource localhost InitialCatalog VBNET2008 IntegratedSecurity SSPI 关于更多的数据库连接字符串 可参考 连接字符串确定后 需要将其传递给Connection类的实例的ConnectionString属性 然后调用其Open方法打开该连接 这里以SqlConnection类为例 1DimconnectionStringAsString DataSource server InitialCatalog VBNET2008 IntegratedSecurity SSPI 2DimconnAsSqlConnection newSqlConnection 3conn ConnectionString cString4conn Open 将连接字符串写入配置文件 如果是Windows窗体应用程序 则需要先添加该配置文件 单击菜单栏中的 项目 添加新项 打开 添加新项 WindowsApplication1 窗口 选择常规类别中的应用程序配置文件 在app configue文件中加入一个connectionStrings标签 代码如下 12 34567 使用配置文件中的连接字符串 可以通过ConfigurationManager ConnectionStrings集合通过名字将其取出 使用该集合 首先要添加System Configuration命名空间的引用 下面代码通过ConfigurationManager ConnectionStrings集合取出了连接字符串 DimconnstringAsString ConfigurationManager ConnectionStrings MyConnectionString ConnectionString 如果是ASP NET项目 则可以将数据库连接字符串写入Web Config文件 方式与Windows窗体应用程序中的app config文件类似 添加一个connectionstring标签即可 在需要用到连接字符串的时候 可以从WebConfigurationManager ConnectionStrings集合中通过名字将它取出来 要使用这个集合的话 同样需要在项目中添加对System Configuration命名空间的引用 16 2 3执行数据库操作 NET中执行数据库操作是通过Command类来完成的 Command类是一个执行SQL语句和存储过程的类 通过它 我们可以实现对数据的添加 删除 更新 查询等各种操作 使用Command类 首先要确定Command的种类 是SqlCommand OracleCommand 还是其他类型 在确定了Command类型之后 需要把为它指定一个Connection 另外需要指定CommandType和CommandText 这3项信息可以在创建Command对象的时候以参数的形式传到Command的构造函数中 也可以通过属性的方式进行设置 需要说明的是 CommandText既可以是SQL语句 也可以是存储过程 也可以是数据表的名字 使用不同种类的CommandText 需要设置相应的CommandType 3种不同的CommandType 如果需要执行SQL语句 下面的代码演示了如何使用SqlCommand对象执行一个SQL查询语句 采用了属性设置的方式指定了必须的3项信息 代码如下 1DimcmdAsSqlCommand newSqlCommand 2cmd Connection con3cmd CommandType CommandType Text4cmd CommandText SELECT FROMBookInfo 事实上 上面代码还可以写成更简洁的形式 如下 DimcmdAsSqlCommand newSqlCommand SELECT FROMBookInfo con 如果需要执行存储过程 如果需要执行存储过程 可以使用下面这种方式 DimcmdAsSqlCommand newSqlCommand GetBooks con cmd CommandType CommandType StoredProcedure 至此 我们只是简单地定义出了Command对象 并为它们设置了一些属性 但还并没有真正的执行这些操作 如果想要执行Command操作的话 还需要调用其他方法来执行 我们有3种方法可以使用 这3种方法的主要不同之处在于它们的返回值不同 三种执行方法 ExecuteNonQuery 用于执行非SELECT的命令 如INSERT DELETE或者UPDATE命令 返回一个命令所影响的数据的行数 也可以用ExecuteNonQuery 方法来执行一些数据定义命令 如新建 更新 删除数据库对象 如表 索引等 ExecuteScalar 用于执行SELECT查询命令 返回数据中第一行第一列的值 这个方法通常用来执行那些用到COUNT 或者SUM 函数的SELECT命令 ExecuteReader 用于执行SELECT命令 并返回一个DataReader对象 这个DataReader是前向只读的数据集 16 2 4DataReader DataReader是一种非常有用的数据读取工具 提供一种连接着数据库 只能向前的记录访问方式 它可以执行SQL语句或者存储过程 DataReader是一个轻量级的数据对象 如果只是需要将数据读出并显示的话 那么它就是最合适的工具DataReader在读取数据的时候要求数据库保持在连接状态 读完数据之后才能断开连接 DataReader的常用方法 示例 1PrivateSubForm1 Load ByValsenderAsSystem Object ByValeAsSystem EventArgs HandlesMyBase Load2 创建Connection对象和Command对象3DimconnectionStringAsString ConfigurationManager ConnectionStrings MyConnectionString ConnectionString4DimconAsNewSqlConnection connectionString 5DimcmdAsNewSqlCommand SELECT FROMBookInfo con 6DimreaderAsSqlDataReader 7Try8con Open 打开数据库连接9 执行ExecuteReader 方法返回的是一个DataReader对象10reader cmd ExecuteReader 11Whilereader Read 遍历DataReader时最常用的方式12Label1 Text reader 0 vbTab reader 1 vbCrLf 按照顺序或列名指定要读取的项13EndWhile14CatchexAsSqlException15ThrowNewApplicationException ex ToString 执行过程中发生异常的话 抛出异常16Finally17reader Close 关闭DataReader18con Close 断开数据库连接19EndTry20EndSub 通过这段代码 我们得到了一个填充了数据的DataReader对象 在需要显示这些数据的地方 就可以通过读DataReader的方式来显示这些数据了 Close方法可以关闭DataReader对象和数据源之间的联系 在读完数据之后务必把DataReader对象关闭 否则当DataReader对象尚未关闭时 DataReader所使用的Connection对象就无法执行其他操作 16 2 5DataSet与DataAdapter DataSet是实现基于非连接的数据查询的核心组件 可以将DataSet看成是一个数据容器 将数据库中的数据拷贝了一份放到了用户本地的内存中 供用户在不连接数据库的情况下读取数据 DataSet对象表示数据库中数据的缓存 具有类似数据库的结构 如表 列 关系和约束等 下面代码创建了一个DataSet 创建时可以选择指定一个名称参数 如果没有为DataSet指定名称 则该名称会设置为 NewDataSet DimbooksAsDataSet NewDataSet Books DataAdapter类 使用DataSet 就一定会用到DataAdapter类 这也是一个非常常用的类 因为DataSet必须通过DataAdapter才能得到数据 因为DataSet并不能直接跟数据源产生联系 这种联系必须通过DataAdapter来完成 DataAdapter对象的工作步骤 一般有两种 一种是通过Command对象执行SQL语句 将获得的结果集填充到DataSet对象中 另一种是将DataSet里更新数据的结果返回到数据库中 DataAdapter的常用方法 Fill方法 用于填充或刷新DataSet Update方法 将DataSet中的数据更新到数据库里 16 3ADO NET综合应用 应用背景 某学院的图书资料室需要设计一个图书信息管理的程序 能够显示该资料室的图书的信息 并实现对图书的添加 删除 更新 并且可以对图书进行查询 数据库表结构 分层逻辑 真正进行项目开发时 我们并不会把对数据库的操作代码嵌入到业务逻辑代码中 它们一般都是分开存放的 当逻辑代码需要数据的时候 它通过调用专门的数据库操作代码来得到这些数据 这个可以简单的理解成业务的分层 不同的代码负责不同的功能 互不干扰 这样做对代码的维护和代码的重用都非常的有利 到目前为止比较成熟并被众多开发者所采用的是这样一种模式 为数据库中每一个主要的表配置一个专门的数据信息类 这个类中包含这个表中的数据信息 另外为这个表提供一组它要用到的方法 如保存数据 删除数据 更新数据等方法 将这些方法也封装在一个类中 与BookInfo表对应的数据类 这个数据类非常简单 每个属性都与数据表中的一项对应 数据库操作类 1PublicClassBookInfoDB23EndClass这个类暂时是空的 下面所有针对数据库表BookInfo的操作 我们都会添加到这个类中 16 3 1连接数据库 首先在项目中添加应用程序配置文件app config 在该配置文件中配置上连接字符串123 将这个字符串定义成一个全局变量 这样整个类中需要用到它的地方都可以方便的调用 常见的方式是将这个获取字符串内容的代码放到数据操作类的构造函数中 1PublicClassBookInfoDB2PublicconnectionStringAsString3PublicSubNew 4connectionString System Configuration ConfigurationManager ConnectionStrings Book ConnectionString5EndSub6EndClass 16 3 2查询数据 在BookInfoDB类中添加GetBooks 的函数 用于查询所有图书的信息 1 批量查询2PublicFunctionGetBooks AsDataSet3DimconAsNewSqlConnection connectionString 4DimdsAsNewDataSet 5 假设我们想要得到所有的图书信息6DimcmdAsNewSqlCommand SELECT FROMBookInfo con 7DimadpAsNewSqlDataAdapter cmd 8Try9con Open 10adp Fill ds 将数据填充到DataSet中11CatchexAsSqlException12ThrowNewApplicationException Dataerror 执行过程中发生异常的话 抛出异常13Finally14con Close 关闭数据库连接15EndTry16Returnds 返回数据集17EndFunction 查询单条数据需要首先指定我们想要得到哪条学生信息 这里我们通过指定图书的名称来确定具体的那条记录 1 单个查询2PublicFunctionGetBookByName ByValnameAsString AsBookDetails3 定义BookDetails对象 用于存储图书信息4DimbookAsNewBookDetails5DimreaderAsSqlDataReader6DimconAsNewSqlConnection connectionString 7DimcmdAsNewSqlCommand con 8cmd CommandText SELECT FROMBookInfoWHEREName name 9Try10con Open 11 调用Command对象的ExecuteReader方法12reader cmd ExecuteReader 13 循环读取所有数据 实际上这里只有一条记录 14Whilereader Read15 根据列名取出不同列的数据16book ISBN reader ISBN 17book Name reader Name 18book Author reader Author 19book Press reader Press 20book Price reader Price 21book PressDate reader PressDate 22EndWhile23reader Close 24CatchexAsSqlExce
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- Nannochelin-A-生命科学试剂-MCE
- N-Acetyl-2-3-dehydro-2-deoxyneuraminic-acid-methyl-ester-生命科学试剂-MCE
- Muscle-homing-peptide-M12-生命科学试剂-MCE
- Listening I (21级 创新班)学习通超星期末考试答案章节答案2024年
- MitoE10-生命科学试剂-MCE
- 耳背墙工技术方案
- 活动方案之驾驶员岗前培训方案
- 第四单元-第四单元知识清单
- 设施选址课程设计日志
- 危险品押运合同模板(2篇)
- (完整版)俄语动词命令式的构成及用法
- GB/Z 43281-2023即时检验(POCT)设备监督员和操作员指南
- (完整)痔疮手术知情同意书
- 古典诗词之词律课件
- 物流企业运营管理第五章 物流企业业务模式
- 手术麻醉科腰椎穿刺术考核试题
- 大陈岛垦荒精神介绍
- 写作与沟通智慧树知到课后章节答案2023年下杭州师范大学
- 农村原民办代课教师教龄补助申请表
- 临边作业安全防护课件
- 四川省凉山州西昌市2024届九年级物理第一学期期中检测试题含解析
评论
0/150
提交评论