版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第21章 ADO.NET之一:连接层21.1 ADO.NET概述 ADO.NETADO.NET是微软以类似于是微软以类似于ADOADO的方式设计并实现的专用于的方式设计并实现的专用于. .NETNET平台的新技术。平台的新技术。它提供一个面向对象的数据存取构架。它提供一个面向对象的数据存取构架。 可以使用 ADO.NET 的两个组件来访问和处理数据: .NET Framework 数据提供程序 DataSetNET Framework 数据提供程序数据提供程序 .NET Framework 数据提供程序是专门为数据处理以及快速地只进、只读访问数据而设计的组件。Connection 对象提供与数
2、据源的连接。Command 对象使您能够访问用于返回数据、修改数据、运行存储过程以及发送或检索参数信息的数据库命令。DataReader 从数据源中提供高性能的数据流。最后,DataAdapter 提供连接 DataSet 对象和数据源的桥梁。DataAdapter 使用 Command 对象在数据源中执行 SQL 命令,以便将数据加载到 DataSet 中,并使对 DataSet 中数据的更改与数据源保持一致。DataSet ADO.NET DataSet 专门为独立于任何数据源的数据访问而设计。因此,它可以用于多种不同的数据源,用于 XML 数据,或用于管理应用程序本地的数据。DataSe
3、t 包含一个或多个 DataTable 对象的集合,这些对象由数据行和数据列以及有关 DataTable 对象中数据的主键、外键、约束和关系信息组成。选择选择 DataReader 或或 DataSet 在决定应用程序应使用 DataReader还是应使用 DataSet时,应考虑应用程序所需的功能类型。DataSet 用于执行以下功能: 在应用程序中将数据缓存在本地,以便可以对数据进行处理。如果只需要读取查询结果,DataReader 是更好的选择。 在层间或从 XML Web 服务对数据进行远程处理。 与数据进行动态交互,例如绑定到 Windows 窗体控件或组合并关联来自多个源的数据。
4、对数据执行大量的处理,而不需要与数据源保持打开的连接,从而将该连接释放给其他客户端使用。21.2 ADO.NET数据提供程序ADO.NET 操作数据库结构图本章内容本章内容.NET 数据提供程序类型. .NET Framework 数据提供程序数据提供程序 说说 明明SQL Server .NET 数据提供程序数据提供程序Microsoft SQL Server 数据源数据源System.Data.SqlClient 命名空间命名空间OLE DB .NET 数据提供程序数据提供程序OLE DB 公开的数据源公开的数据源System.Data.OleDb 命名空间命名空间ODBC .NET 数据
5、提供程序数据提供程序ODBC 公开的数据源公开的数据源System.Data.Odbc 命名空间命名空间Oracle .NET 数据提供程序数据提供程序Oracle 数据源数据源System.Data.OracleClient 命名空间命名空间21.6 创建Autolot数据库2021-10-1621.7 连接和检索数据数据库命令对象数据库命令对象CommandCommandSqlCommand SqlCommand 、OleDbCommandOleDbCommand提供存取数据库的命令(包括:提供存取数据库的命令(包括:SelectSelect、InsertInsert、DeleteDele
6、te、UpdateUpdate)提供数据源(库)的连接,针对不同的数据库有不同的连接对象;提供数据源(库)的连接,针对不同的数据库有不同的连接对象;数据库连接对象数据库连接对象ConnectionConnectionSqlSqlConnectionConnection 、OleDbOleDbConnectionConnection四个对象四个对象数据库阅读器数据库阅读器 DataReaderDataReader通过通过CommandCommand执行执行SQLSQL命令可提供一个向前的数据流。供应用程序读取。命令可提供一个向前的数据流。供应用程序读取。DataAdapterDataAdapte
7、r含两个主要成员,含两个主要成员,ConnectionConnection及一组及一组CommandCommand对象,通过构造函对象,通过构造函数可以为这两个对象赋值。它可以向数可以为这两个对象赋值。它可以向DataSetDataSet装载表数据。装载表数据。数据库适配器数据库适配器DataAdapterDataAdapterSqlSqlDataAdapter DataAdapter 、OleDbOleDbDataAdapteDataAdapte21.8 使用 Connection应用程序应用程序请求数据请求数据Connection桥梁桥梁连接数据库示例 连接到本机的 AutoLot数据库演
8、示示例演示示例1 1:测试测试 AutoLot 数据库连接数据库连接示例1 代码分析 关键代码回顾/ 数据库连接字符串数据库连接字符串string connString = Data Source= . ;Initial Catalog= AutoLot;User ID=sa;pwd=*;/ 创建创建 Connection 对象对象SqlConnection connection = new SqlConnection(connString); / 打开数据库连接打开数据库连接connection.Open();Console.WriteLine(打开数据库连接成功打开数据库连接成功); /
9、关闭数据库连接关闭数据库连接connection.Close();Console.WriteLine(关闭数据库连接成功关闭数据库连接成功);表示本机表示本机Connection 主要成员必须显式关闭连接必须显式关闭连接属性名称属性名称说说 明明ConnectionString 连接字符串连接字符串方法方法说说 明明Open()打开数据库连接打开数据库连接Close()关闭数据库连接关闭数据库连接连接数据库步骤连接数据库的步骤:1、定义连接字符串2、创建、创建 Connection 对象对象3、打开与数据库的连接、打开与数据库的连接Data Source=服务器名服务器名;Initial Ca
10、talog=数据库名数据库名; User ID=用户名用户名;Pwd=密码密码SqlConnection connection = new SqlConnection(connString);连接字符串连接字符串connection.Open( );没有密码,可省略没有密码,可省略Connection 对象命名空间命名空间对应的对应的 Connection 对象对象System.Data.SqlClient SqlConnectionSystem.Data.OleDbOleDbConnectionSystem.Data.Odbc OdbcConnectionSystem.Data.Oracle
11、ClientOracleConnection不同命名空间的不同命名空间的 Connection 对象对象小结连接到本机的连接到本机的 pubs 数据库数据库/ 连接字符串连接字符串string connString = Data Source=.;Initial Catalog=pubs;User ID=sa;/ 创建创建Connection 对象对象 SqlConnection connection = new SqlConnection(connString);connection.Open( ); / 打开数据库连接打开数据库连接connection.Close( ); / 关闭数据库连
12、接关闭数据库连接关键代码关键代码参考答案参考答案为什么使用异常处理应用程序应用程序打开数据库打开数据库处理数据处理数据与数据库的连接中断与数据库的连接中断无法打开数据库无法打开数据库无法操作数据无法操作数据出现意外错误!出现意外错误!出现异常出现异常异常处理 异常:在运行时发生的错误 异常处理:预知可能发生的异常,在程序中编码处理操作数据库时可能发生异常:操作数据库时可能发生异常: 无法打开数据库无法打开数据库 无法读取数据无法读取数据 数据操作出错数据操作出错 如何处理异常2-1 使用 trycatch 块捕获和处理异常try connection.Open(); / connection.
13、Close();catch(处理的异常类型处理的异常类型) / 错误处理代码错误处理代码处理异常的代码处理异常的代码出现异常,跳到出现异常,跳到catch否则正常向下执行否则正常向下执行出出现现异异常,常,跳跳转转连接关闭语句连接关闭语句将不被执行将不被执行包含可能出现异常的代码包含可能出现异常的代码如何处理异常2-2 finally 块无论是否发生异常,都会执行try connection.open(); / catch(处理的异常类型处理的异常类型) finally connection.Close();可能出现异常的代码可能出现异常的代码处理异常的代码处理异常的代码是否发生异常是否发生异
14、常数据库连接都会关闭数据库连接都会关闭必须执行的语句必须执行的语句放在放在 finally 中中无论如何都会执行的代码无论如何都会执行的代码connection.Open();Console.WriteLine(打开数据库连接完毕打开数据库连接完毕); connection.Close();Console.WriteLine(关闭数据库连接完毕关闭数据库连接完毕);处理异常 修改示例1的代码,增加 try 语句块演示示例演示示例2 2:使用:使用try-catch-finally小结如果如果 try 中中没有出现异常没有出现异常, 输出哪几行信息?输出哪几行信息?try / 可能出现异常的代码
15、可能出现异常的代码 Console.WriteLine(try块块); catch (Exception e) Console.WriteLine(catch块块);finally Console.WriteLine(finally块块);显示显示显示显示不显示不显示使用元素 添加config文件 提取连接字符串 string ConnString = ConfigurationManager.ConnectionStringsAutoLotSqlProvider.ConnectionString; 注:首先,添加对System.Configuration.dll 文件的引用;使用using
16、using (SqlConnection conn = new SqlConnection(ConnString) 练习测试AutoLot的数据连接 需求说明: 创建My AutoLot Base控制台程序 新建用于操作数据库的DBOperation类 在DBOperation类中自定义数据库连接方法,实现连接和关闭AutoLot数据库完成时间:完成时间:20分钟分钟练习为连接操作添加异常 需求说明: 为数据库连接增加异常处理 将数据库服务停止,再次测试连接操作完成时间:完成时间:15分钟分钟21.8.3 使用Command应用程序应用程序打开数据库打开数据库处理数据处理数据Connectio
17、n怎样处理数据怎样处理数据提交提交SQL命令并从数据源中返回结果命令并从数据源中返回结果 Command 的主要成员属性名称属性名称说说 明明Connection Command对象使用的数据库连接对象使用的数据库连接CommandText执行的执行的SQL语句语句方法方法说说 明明 ExecuteNonQuery执行不返回行的语句,如执行不返回行的语句,如UPDATE等等ExecuteReader返回返回DataReader对象对象ExecuteScalar返回单个值,如执行返回单个值,如执行COUNT(*)操作数据库示例完成MySchoolBase系统的登录功能1、验证管理员的用户名和密码
18、是否存在2、验证通过,显示登录成功信息使用 Command 步骤使用Command步骤:1、创建数据库连接2、定义 SQL 语句3、创建 Command 对象4、执行命令SqlConnection connection = new SqlConnection(connString);string sql = select count(*) from Admin where LoginId= + userName + and LoginPwd= + pwd + ;connection.Open(); / 打开数据库连接打开数据库连接SqlCommand command = new SqlComm
19、and(sql, connection);int num = (int)command.ExecuteScalar();示例示例 3 关键代码:关键代码:执行命令前,必须打开数据库连接!执行命令前,必须打开数据库连接!要进行类型转换!要进行类型转换!分析示例3定义一个定义一个 ValidateUser() 方法方法需要需要 Connection 和和 Command 对象对象分两步实现验证分两步实现验证:1、建立数据库连接、建立数据库连接2、验证用户是否存在、验证用户是否存在 定义一个定义一个 CheckLogin () 方法用于显方法用于显示示ValidateUser() 返回的结果信息返回
20、的结果信息分析验证方法ValidateUser() 方法框架1、验证的结果:通过,不通过、验证的结果:通过,不通过返回值为返回值为 bool 型型2、方法需要:、方法需要: 用户名,密码用户名,密码值方式传参值方式传参3、不通过的原因:、不通过的原因: 用户名或密码不存在、其他原因用户名或密码不存在、其他原因引用方式传参引用方式传参 public bool ValidateUser (string userName, string pwd, ref string strMsg) 用户验证方法具体实现 第一步:创建数据库连接第二步:查询用户是否存在第二步:查询用户是否存在SELECT COUNT
21、(*)ExecuteScalar() 方法查询方法查询ValidateUser() 方法具体实现方法具体实现演示示例演示示例3 3:检查:检查MySchoolBase用户登录用户登录21.9 使用 DataReader应用程序应用程序 毛毛,电信系,优秀毛毛,电信系,优秀 毛毛毛毛姓名:姓名:学校:学校:电信系电信系成绩:成绩:优秀优秀 怎样读取数据库的数据?使用使用 DataReader 对象对象DataReader 对象 每次读取一行数据命名空间命名空间对应的对应的 DataReader 对象对象System.Data.SqlClient SqlDataReaderSystem.Data.
22、OleDbOleDbDataReaderSystem.Data.Odbc OdbcDataReaderSystem.Data.OracleClientOracleDataReader使用 DataReader 查询数据在数据库操作类中创建读取学生列表方法在数据库操作类中创建读取学生列表方法使用使用 DataReader 读取学生学号和姓名读取学生学号和姓名在业务信息类中创建输出信息方法在业务信息类中创建输出信息方法在菜单选项中添加输出信息方法在菜单选项中添加输出信息方法 如何查看学生学号、姓名列表? 演示示例:使用演示示例:使用 DataReader 读取数据读取数据示例2代码分析 关键代码回
23、顾:示例示例2 2源代码源代码command.ExecuteReader(); / 执行查询执行查询SqlDataReader reader = _dbOper.GetStudentList();/取得学生用户列表取得学生用户列表方法方法/循环读取循环读取DataReaderwhile (reader.Read() Console.Write(readerStudentNo + t); Console.WriteLine(readerStudentName); /关闭关闭DataReaderreader.Close();循环读取数据行循环读取数据行并显示并显示DataReader 的主要成员属
24、性属性说明说明HasRows 是否返回了结果是否返回了结果方法方法说明说明 Read前进到下一行记录前进到下一行记录Close关闭关闭 DataReader 对象对象 DataReader 的主要成员:DataReader 使用步骤小结使用 DataReader 检索数据的步骤:1、创建 Command 对象2、调用 ExecuteReader() 创建 DataReader 对象3、使用 DataReader 的 Read() 方法逐行读取数据4、读取某列的数据,(type)dataReader 5、关闭 DataReader 对象获取某列的值:获取某列的值:方法一:指定列的索引,从方法一:
25、指定列的索引,从0开始开始方法二:指定列名方法二:指定列名注意:注意:DataReader 使用后必须关闭使用后必须关闭指导实现学生姓名查询 训练要点: DataReader对象的使用 需求说明: 当管理员输入操作键“3”时,给予输入学号的提示,根据输入查询Student表中匹配学号的学生姓名,将学生学号和姓名一并输出讲解需求说明讲解需求说明 实现思路 1、在数据库操作类中创建查询学生姓名的方法 2、使用StringBuilder拼写带条件的Sql语句 3、使用DataReader对象的Read()方法读取学生姓名并返回 4、在业务类中调用查询方法并输出返回的学生姓名 难点指导: 执行Comm
26、and对象的ExecuteReader()方法得到Reader对象 学号为主键,只能读取至多一行信息,固使用if语句完成时间:完成时间:25分钟分钟指导实现学生姓名查询指导实现学生信息查询 训练要点: DataReader对象的使用 Sql语句的拼写 需求说明: 当管理员输入操作键“4”时,给予输入学生姓名的提示,根据姓名模糊查询Student表中除密码外的全部信息并显示,年级根据实际编号显示年级名称讲解需求说明讲解需求说明 实现思路 1、在数据库操作类中创建查询学生信息的方法 2、使用StringBuilder拼写内连接的Sql语句 3、使用DataReader对象的Read()方法循环读取
27、学生信息 4、在业务类中调用查询学生信息的方法并输出 关键代码:完成时间:完成时间:25分钟分钟指导实现学生信息查询SELECT A.StudentNo ,A.StudentName ,A.Sex ,B.GradeName ,A.Phone ,A.Adress ,A.BornDate ,A.EmailFROM Student as A ,Grade as BWHERE StudentName like %学生姓名学生姓名%AND A.GradeId=B.GradeId操作数据应用程序应用程序毛毛,电信系,良好毛毛,电信系,良好 毛毛毛毛姓名:姓名:系部:系部:电信系电信系成绩:成绩:良好良好
28、如何对数据库的数据进行增删改?使用使用 ExecuteNonQuery() 方法方法操作数据示例1、构件增加年级信息的、构件增加年级信息的Sql语句语句2、创建、创建SqlCommand对象对象3、使用、使用 ExecuteNonQuery() 方法向数据库增方法向数据库增加记录加记录4、处理返回结果、处理返回结果如何实现新增年级信息呢?如何实现新增年级信息呢? 演示示例:演示示例:向数据库增加记录向数据库增加记录示例 3代码分析 关键代码回顾:示例示例3 3源代码源代码StringBuilder sb = new StringBuilder();sb.AppendLine(INSERT IN
29、TO);sb.AppendLine( Grade);sb.AppendLine(VALUES);sb.AppendLine( ( + gradeName + );/ 创建创建command对象对象SqlCommand command = new SqlCommand(sb.ToString(), conn);/ 执行命令执行命令command.ExecuteNonQuery(); 返回受影响记录的行数返回受影响记录的行数单引号的位置单引号的位置ExecuteNonQuery()方法小结 该方法执行指定的 sql 语句 返回受影响的行数使用使用 ExecuteNonQuery() 的步骤小结:的
30、步骤小结:1、创建、创建 Connection 对象对象2、定义、定义sql 语句语句3、创建、创建 Command 对象对象4、执行、执行 ExecuteNonQuery() 方法方法5、根据返回的结果进行处理、根据返回的结果进行处理练习实现年级信息的创建 需求说明: 实现将管理员输入的年级名称添加到年级表中,并输出添加结果提示完成时间:完成时间:20分钟分钟指导实现出生日的修改 训练要点: 类型转换 Command对象的ExecuteNonQuery()方法 需求说明: 当管理员输入操作键“6”时,给予输入要修改的学生学号和修改后的出生日的提示,根据学号更新Student表中的出生日 出生
31、日输入格式错误、更新成功以及异常发生给出相应提示信息 确认数据库中的数据被成功更新讲解需求说明讲解需求说明 实现思路 1、在数据库操作类中创建更新方法 2、使用StringBuilder拼写条件更新的Sql语句 3、使用Command对象的ExecuteNonQuery()方法根据学号更新出生日 4、在业务类中调用更新方法,使用异常处理捕获输入错误的出生日 难点指导: 执行Command对象的ExecuteNonQuery()方法执行对数据库的修改操作 可以使用Convert.ToDateTime()方法转换管理员输入的出生日完成时间:完成时间:25分钟分钟指导实现出生日的修改练习实现学生信息
32、的删除 需求说明: 当管理员输入操作键“7”时,给予输入删除的学生学号的提示 根据学号删除Student表中的学生信息 确认数据库中的数据被成功删除完成时间:完成时间:20分钟分钟21.10 构建可重用的数据访问库 构建AutoLotDAL.dll 类库项目 /连接数据库 private SqlConnection conn = null; public void OpenConnection(string connString) conn = new SqlConnection(connString); conn.Open(); public void CloseConnection() conn.Close(); /只读查询 返回DataReader public SqlDataR
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025机械出租合同范文
- EPE包装材料项目可行性研究报告
- 固碱项目可行性研究报告
- 2025外汇资金借贷合同范本
- 0PP彩印袋行业行业发展趋势及投资战略研究分析报告
- 办公健康管理的利器-实时超声科的实践与思考
- 2025进出口贸易合同样本
- 2025人民币委托贷款合同
- 以人为本家庭教育中心理辅导的实践探索
- 办公建筑中的地质安全性研究
- 建筑施工安全风险辨识分级管控指南494条-副本
- 橙子主题课程设计
- 静脉留置针所致静脉炎的标准化护理预防流程
- 常住人口登记表(集体户口)-英文翻译
- 专科《法理学》(第三版教材)形成性考核试题及答案
- 广西百色市县级市2023-2024学年八年级上学期期末检测物理试题(原卷版)
- 人教版2024年新教材七年级上册英语各单元考点复习提纲
- 山东省物业管理条例
- 一年级小学数学下册应用题800道
- 第八章《运动和力》大单元教学设计 -2023-2024学年人教版物理八年级下学期
- 12D401-3 爆炸危险环境电气线路和电气设备安装
评论
0/150
提交评论