第21章之一 连接层课件_第1页
第21章之一 连接层课件_第2页
第21章之一 连接层课件_第3页
第21章之一 连接层课件_第4页
第21章之一 连接层课件_第5页
已阅读5页,还剩53页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第21章节DAO第21章之一:连接层第21章节DAO21.1概述是微软以类似于ADO的方式设计并实现的专用于.NET平台的新技术。它提供一个面向对象的数据存取构架。可以使用

的两个组件来访问和处理数据:.NETFramework数据提供程序DataSet第21章节DAONETFramework数据提供程序.NETFramework数据提供程序是专门为数据处理以及快速地只进、只读访问数据而设计的组件。Connection对象提供与数据源的连接。Command对象使您能够访问用于返回数据、修改数据、运行存储过程以及发送或检索参数信息的数据库命令。DataReader从数据源中提供高性能的数据流。最后,DataAdapter提供连接DataSet对象和数据源的桥梁。DataAdapter使用Command对象在数据源中执行SQL命令,以便将数据加载到DataSet中,并使对DataSet中数据的更改与数据源保持一致。第21章节DAODataSet

DataSet专门为独立于任何数据源的数据访问而设计。因此,它可以用于多种不同的数据源,用于XML数据,或用于管理应用程序本地的数据。DataSet包含一个或多个DataTable对象的集合,这些对象由数据行和数据列以及有关DataTable对象中数据的主键、外键、约束和关系信息组成。第21章节DAO选择DataReader或DataSet

在决定应用程序应使用DataReader还是应使用DataSet时,应考虑应用程序所需的功能类型。DataSet用于执行以下功能:在应用程序中将数据缓存在本地,以便可以对数据进行处理。如果只需要读取查询结果,DataReader是更好的选择。在层间或从XMLWeb服务对数据进行远程处理。与数据进行动态交互,例如绑定到Windows窗体控件或组合并关联来自多个源的数据。对数据执行大量的处理,而不需要与数据源保持打开的连接,从而将该连接释放给其他客户端使用。第21章节DAO21.2数据提供程序第21章节DAO

操作数据库结构图本章内容第21章节DAO.NET数据提供程序类型.NETFramework数据提供程序

说明SQLServer

.NET数据提供程序MicrosoftSQLServer数据源System.Data.SqlClient命名空间OLEDB

.NET数据提供程序OLEDB公开的数据源System.Data.OleDb

命名空间ODBC.NET数据提供程序ODBC公开的数据源System.Data.Odbc

命名空间Oracle

.NET数据提供程序Oracle数据源System.Data.OracleClient命名空间第21章节DAO21.6创建Autolot数据库4/4/2024第21章节DAO21.7连接和检索数据②数据库命令对象CommandSqlCommand、OleDbCommand提供存取数据库的命令(包括:Select、Insert、Delete、Update)提供数据源(库)的连接,针对不同的数据库有不同的连接对象;①数据库连接对象ConnectionSqlConnection、OleDbConnection.NET数据提供程序针对SQL、OLEDB两组数据源,各有四个对象:③数据库阅读器DataReader通过Command执行SQL命令可提供一个向前的数据流。供应用程序读取。DataAdapter含两个主要成员,Connection及一组Command对象,通过构造函数可以为这两个对象赋值。它可以向DataSet装载表数据。④数据库适配器DataAdapterSqlDataAdapter、OleDbDataAdapte第21章节DAO21.8使用Connection应用程序数据源请求数据Connection桥梁第21章节DAO连接数据库示例连接到本机的AutoLot数据库演示示例1:测试

AutoLot

数据库连接第21章节DAO示例1代码分析关键代码回顾//数据库连接字符串stringconnString="DataSource=.;InitialCatalog=AutoLot;UserID=sa;pwd=***";//创建

Connection对象SqlConnectionconnection=newSqlConnection(connString);

//打开数据库连接connection.Open();Console.WriteLine("打开数据库连接成功");

//关闭数据库连接connection.Close();Console.WriteLine("关闭数据库连接成功");表示本机第21章节DAOConnection主要成员必须显式关闭连接属性名称说明ConnectionString连接字符串方法说明Open()打开数据库连接Close()关闭数据库连接第21章节DAO连接数据库步骤连接数据库的步骤:1、定义连接字符串2、创建Connection对象3、打开与数据库的连接DataSource=服务器名;InitialCatalog=数据库名;UserID=用户名;Pwd=密码SqlConnectionconnection=newSqlConnection(connString);连接字符串connection.Open();没有密码,可省略第21章节DAOConnection对象命名空间对应的Connection对象System.Data.SqlClientSqlConnectionSystem.Data.OleDbOleDbConnectionSystem.Data.OdbcOdbcConnectionSystem.Data.OracleClientOracleConnection不同命名空间的Connection对象第21章节DAO小结连接到本机的pubs数据库//连接字符串stringconnString="DataSource=.;InitialCatalog=pubs;UserID=sa";//创建Connection对象

SqlConnectionconnection=newSqlConnection(connString);connection.Open();//打开数据库连接……connection.Close();//关闭数据库连接关键代码参考答案第21章节DAO为什么使用异常处理应用程序打开数据库处理数据……数据源与数据库的连接中断无法打开数据库无法操作数据出现意外错误!出现异常第21章节DAO异常处理异常:在运行时发生的错误异常处理:预知可能发生的异常,在程序中编码处理操作数据库时可能发生异常:无法打开数据库无法读取数据数据操作出错

……第21章节DAO如何处理异常2-1使用try—catch块捕获和处理异常try{connection.Open();//……connection.Close();}catch(处理的异常类型){//错误处理代码}处理异常的代码出现异常,跳到catch否则正常向下执行出现异常,跳转连接关闭语句将不被执行包含可能出现异常的代码第21章节DAO如何处理异常2-2finally块——无论是否发生异常,都会执行try{connection.open();//……}catch(处理的异常类型){

}finally{connection.Close();}可能出现异常的代码处理异常的代码是否发生异常数据库连接都会关闭必须执行的语句放在finally中无论如何都会执行的代码第21章节DAOconnection.Open();Console.WriteLine("打开数据库连接完毕");connection.Close();Console.WriteLine("关闭数据库连接完毕");处理异常修改示例1的代码,增加try语句块演示示例2:使用try-catch-finally第21章节DAO小结如果try中没有出现异常,输出哪几行信息?try{//…可能出现异常的代码

Console.WriteLine("try块");}catch(Exceptione){Console.WriteLine("catch块");}finally{Console.WriteLine("finally块");}显示显示不显示第21章节DAO使用<connectionStrings>元素添加config文件<connectionStrings><addname="AutoLotSqlProvider"connectionString="DataSource=.;InitialCatalog=AutoLot;PersistSecurityInfo=True;UserID=sa;Password=***********"/></connectionStrings>提取连接字符串stringConnString=ConfigurationManager.ConnectionStrings["AutoLotSqlProvider"].ConnectionString;注:首先,添加对System.Configuration.dll文件的引用;第21章节DAO使用usingusing(SqlConnectionconn=newSqlConnection(ConnString))

{

}第21章节DAO练习——测试AutoLot的数据连接需求说明:创建MyAutoLotBase控制台程序新建用于操作数据库的DBOperation类在DBOperation类中自定义数据库连接方法,实现连接和关闭AutoLot数据库完成时间:20分钟第21章节DAO练习——为连接操作添加异常需求说明:为数据库连接增加异常处理将数据库服务停止,再次测试连接操作完成时间:15分钟第21章节DAO21.8.3使用Command应用程序打开数据库处理数据……数据源Connection?怎样处理数据Command提交SQL命令并从数据源中返回结果第21章节DAOCommand的主要成员属性名称说明ConnectionCommand对象使用的数据库连接CommandText执行的SQL语句方法说明

ExecuteNonQuery执行不返回行的语句,如UPDATE等ExecuteReader返回DataReader对象ExecuteScalar返回单个值,如执行COUNT(*)第21章节DAO操作数据库示例完成MySchoolBase系统的登录功能1、验证管理员的用户名和密码是否存在2、验证通过,显示登录成功信息第21章节DAO使用Command步骤使用Command步骤:1、创建数据库连接2、定义SQL语句3、创建Command对象4、执行命令SqlConnectionconnection=newSqlConnection(connString);stringsql="selectcount(*)fromAdminwhereLoginId='

"+userName

+"

'andLoginPwd='

"+pwd+"

'";connection.Open();//打开数据库连接SqlCommandcommand=newSqlCommand(sql,connection);intnum=(int)command.ExecuteScalar();示例3关键代码:执行命令前,必须打开数据库连接!要进行类型转换!第21章节DAO分析示例3定义一个ValidateUser()方法需要Connection和Command对象分两步实现验证:1、建立数据库连接2、验证用户是否存在

定义一个CheckLogin()方法用于显示ValidateUser()返回的结果信息第21章节DAO分析验证方法ValidateUser()方法框架1、验证的结果:通过,不通过返回值为bool型2、方法需要:用户名,密码值方式传参3、不通过的原因:用户名或密码不存在、其他原因引用方式传参

publicboolValidateUser

(stringuserName,

stringpwd,

ref

stringstrMsg){}第21章节DAO用户验证方法具体实现第一步:创建数据库连接第二步:查询用户是否存在SELECTCOUNT(*)ExecuteScalar()方法查询ValidateUser()方法具体实现演示示例3:检查MySchoolBase用户登录第21章节DAO21.9使用DataReader应用程序毛毛,电信系,优秀毛毛姓名:学校:电信系成绩:优秀DataReader怎样读取数据库的数据?使用DataReader对象数据库第21章节DAODataReader对象每次读取一行数据命名空间对应的DataReader对象System.Data.SqlClientSqlDataReaderSystem.Data.OleDbOleDbDataReaderSystem.Data.OdbcOdbcDataReaderSystem.Data.OracleClientOracleDataReader第21章节DAO使用DataReader查询数据在数据库操作类中创建读取学生列表方法使用DataReader读取学生学号和姓名在业务信息类中创建输出信息方法在菜单选项中添加输出信息方法如何查看学生学号、姓名列表?演示示例:使用DataReader

读取数据第21章节DAO示例2代码分析关键代码回顾:示例2源代码command.ExecuteReader();//执行查询SqlDataReaderreader=_dbOper.GetStudentList();//取得学生用户列表方法…//循环读取DataReaderwhile(reader.Read()){Console.Write(reader["StudentNo"]+"\t");Console.WriteLine(reader["StudentName"]);}…//关闭DataReaderreader.Close();循环读取数据行并显示第21章节DAODataReader的主要成员属性说明HasRows是否返回了结果方法说明

Read前进到下一行记录Close关闭DataReader对象DataReader的主要成员:第21章节DAODataReader使用步骤小结使用DataReader检索数据的步骤:1、创建Command对象2、调用ExecuteReader()

创建DataReader对象3、使用DataReader的Read()

方法逐行读取数据4、读取某列的数据,(type)dataReader[]5、关闭

DataReader对象获取某列的值:方法一:指定列的索引,从0开始方法二:指定列名注意:DataReader使用后必须关闭第21章节DAO指导——实现学生姓名查询训练要点:DataReader对象的使用需求说明:当管理员输入操作键“3”时,给予输入学号的提示,根据输入查询Student表中匹配学号的学生姓名,将学生学号和姓名一并输出讲解需求说明第21章节DAO实现思路1、在数据库操作类中创建查询学生姓名的方法

2、使用StringBuilder拼写带条件的Sql语句3、使用DataReader对象的Read()方法读取学生姓名并返回4、在业务类中调用查询方法并输出返回的学生姓名难点指导:执行Command对象的ExecuteReader()方法得到Reader对象学号为主键,只能读取至多一行信息,固使用if语句完成时间:25分钟指导——实现学生姓名查询第21章节DAO指导——实现学生信息查询训练要点:DataReader对象的使用Sql语句的拼写需求说明:当管理员输入操作键“4”时,给予输入学生姓名的提示,根据姓名模糊查询Student表中除密码外的全部信息并显示,年级根据实际编号显示年级名称讲解需求说明第21章节DAO实现思路1、在数据库操作类中创建查询学生信息的方法

2、使用StringBuilder拼写内连接的Sql语句3、使用DataReader对象的Read()方法循环读取学生信息4、在业务类中调用查询学生信息的方法并输出关键代码:完成时间:25分钟指导——实现学生信息查询SELECTA.[StudentNo],A.[StudentName],A.[Sex],B.[GradeName],A.[Phone],A.[Adress],A.[BornDate],A.[Email]FROM[Student]asA,[Grade]asBWHERE[StudentName]like‘%学生姓名%'ANDA.[GradeId]=B.[GradeId]第21章节DAO操作数据应用程序毛毛,电信系,良好毛毛姓名:系部:电信系成绩:良好ExecuteNonQuery如何对数据库的数据进行增删改?使用ExecuteNonQuery()方法数据库第21章节DAO操作数据示例1、构件增加年级信息的Sql语句2、创建SqlCommand对象3、使用ExecuteNonQuery()

方法向数据库增加记录4、处理返回结果如何实现新增年级信息呢?演示示例:向数据库增加记录第21章节DAO示例3代码分析关键代码回顾:示例3源代码StringBuildersb=newStringBuilder();sb.AppendLine("INSERTINTO");sb.AppendLine("[Grade]");sb.AppendLine("VALUES");sb.AppendLine("('"+gradeName+"')");//创建command对象SqlCommandcommand=newSqlCommand(sb.ToString(),conn);//执行命令command.ExecuteNonQuery();……返回受影响记录的行数单引号的位置第21章节DAOExecuteNonQuery()方法小结该方法执行指定的sql语句返回受影响的行数使用ExecuteNonQuery()的步骤小结:1、创建Connection对象2、定义sql语句3、创建Command对象4、执行ExecuteNonQuery()方法5、根据返回的结果进行处理第21章节DAO练习——实现年级信息的创建需求说明:实现将管理员输入的年级名称添加到年级表中,并输出添加结果提示完成时间:20分钟第21章节DAO指导——实现出生日的修改训练要点:类型转换Command对象的ExecuteNonQuery()方法需求说明:当管理员输入操作键“6”时,给予输入要修改的学生学号和修改后的出生日的提示,根据学号更新Student表中的出生日出生日输入格式错误、更新成功以及异常发生给出相应提示信息确认数据库中的数据被成功更新讲解需求说明第21章节DAO实现思路1、在数据库操作类中创建更新方法

2、使用StringBuilder拼写条件更新的Sql语句3、使用Command对象的ExecuteNonQuery()方法根据学号更新出生日4、在业务类中调用更新方法,使用异常处理捕获输入错误的出生日难点指导:执行Command对象的ExecuteNonQuery()方法执行对数据库的修改操作可以使用Convert.ToDateTime()方法转换管理员输入的出生日完成时间:25分钟指导——实现出生日的修改第21章节DAO练习——实现学生信息的删除需求说明:当管理员输入操作键“7”时,给予输入删除的学生学号的提示根据学号删除Student表中的学生信息确认数据库中的数据被成功删除完成时间:20分钟第21章节DAO21.10构建可重用的数据访问库构建AutoLotDAL.dll类库项目

//连接数据库privateSqlConnectionconn=null;publicvoidOpenConnection(stringconnString)

{conn=newSqlConnection(connString);conn.Open();

}publicvoidCloseConnection()

{conn.Close();

}第21章节DAO

//只读查询返回DataReaderpublicSqlDataReaderexeReader(stringcmdString,CommandTypecmdType,SqlParameter[]parameters)

{using(SqlCommandcmd=newSqlCommand())

{PrepareCommand(cmd,cmdString,cmdType,parameters);SqlDataReaderdr=cmd.ExecuteReader();returndr;

}

}第21章节DAO

//通用函数privatevoid

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论