第7章ADONET2.ppt

上传人:sccc 文档编号:4748993 上传时间:2023-05-13 格式:PPT 页数:38 大小:1.75MB
返回 下载 相关 举报
第7章ADONET2.ppt_第1页
第1页 / 共38页
第7章ADONET2.ppt_第2页
第2页 / 共38页
第7章ADONET2.ppt_第3页
第3页 / 共38页
第7章ADONET2.ppt_第4页
第4页 / 共38页
第7章ADONET2.ppt_第5页
第5页 / 共38页
点击查看更多>>
资源描述

《第7章ADONET2.ppt》由会员分享,可在线阅读,更多相关《第7章ADONET2.ppt(38页珍藏版)》请在三一办公上搜索。

1、7.4 Connection类-连接数据库,Connection类提供用于连接到数据库和管理对数据库的事务。通过Connection类可完成:建立数据源连接查看数据源连接状态断开数据源连接创建关联的Command对象控制事务处理,7.4.1 Connection类简介,ADO.NET的连接方式 ADO.NET提供了4种连接方式来连接不同的数据源:System.Data.OleDb.OleDbConnection连接到OLE DB数据源,以及Microsoft SQL Server 6.x版或较早版本。System.Data.SqlClient.SqlConnection连接到Microsoft

2、 SQL Server 7.0版或更高版本。System.Data.Odbc.OdbcConnection连接到ODBC数据源。System.Data.OracleClient.OracleConnection连接到Oracle数据源。,7.4.1 Connection类简介,Connection类的属性和方法(1)连接字符串ConnectionString:用于获取或设置打开数据库的字符串,直接决定着数据源能否连接成功,该字符串中的参数包括:Provider:连接提供程序的名称 Server(Data Source):要连接的数据库服务器名或数据库文件名 Database(Initial C

3、atalog):要连接的数据库名称 Uid(User ID):登录数据源的用户帐号 Pwd(Password):登录数据源的用户密码 Encrypt:指定是否对数据进行加密,当取值为true时,则将对所有在客户端和服务器之间传送的数据使用SSL加密,取值为false时不加密。,Integrated Security(Trusted_Connection):指定是否使用继承的安全验证,取值为false时,将在连接字符串中设定Uid和Pwd;取值为true时,将使用当前的Windows帐户进行身份验证。Persist Security Info:指定是否对连接中安全敏感信息(如密码)进行保留和返回

4、,取值为false时,如果连接是打开的或者一直处于打开状态,安全敏感信息将不会作为连接的一部分返回,重置连接字符串将重置包括密码在内的所有连接字符串值。建议使用false取值。(2)连接时限Connect Timeout:确定数据源连接所能持续的最长时间,以秒为单位,默认值为15秒。可以防止数据源连接过程中的无限制等待,若连接网络环境下的数据源或机器处理速度较慢,可将该属性调大,防止数据源连接超时的问题。,(3)连接状态State:连接的当前状态,取值有:adStateClosed:Connection对象是关闭的(默认值)adStateConnecting:正在连接数据源的状态。adStat

5、eExecuting:Connection或Command对象的Execute方法已被调用 adStateFetching:返回行(row)到Recordset对象 adStateOpen:表明Connection对象是打开的(活动的)(4)打开连接Open():打开由ConnectionString属性指定的数据源连接(5)关闭连接Close():关闭与数据源的连接,同时该Connection对象失效,Connection类的使用 Connection类连接到数据源的一般过程如下:,SqlConnection conn=new SqlConnection对象();/创建Connection对

6、象conn.ConnectionString=“参数”;/设置ConnectionString连接字符串属性conn.Open();/用Open方法打开数据源连接/对数据库的操作和数据处理代码部分conn.Close();/用Close方法关闭数据源连接,SqlConnection conn=new SqlConnection对象(“参数”);/创建Connection,/参数为ConnectionString连接字符串属性conn.Open();/用Open方法打开数据源连接/对数据库的操作和数据处理代码部分conn.Close();/用Close方法关闭数据源连接,重载构造函数,7.4.2

7、 用SqlConnection连接到SQL Sever数据源,在直接使用SqlConnection类之前,应该使用using指令导入命名空间System.Data.SqlClinet 应已掌握了如下几类信息:服务器、实例和数据库名称 安全信息用户ID和密码,检查SQL Server是使用Windows身份验证还是SQL Server身份验证。数据库模式获得表和字段名、自动生成或锁定的字段、相关性以及约束的确切拼写,注意对象名称中的下划线和空格。测试SQL语句(可选)对于有怀疑的SQL语句语法或者逻辑,测试语句的有效方法是使用诸如SQL的Query Analyzer查询分析器,而不是在这些语句第

8、一次出现在ASPX页面上时才测试。,try/可能会出现异常的代码 SqlConnection sqlCon=new SqlConnection();/创建连接对象 sqlCon.ConnectionString=“Data Source=CHINA-F42FC5492;Database=SchoolDb;Uid=sa;Pwd=123”;/设置连接字符串 sqlCon.Open();/打开连接 Response.Write(SchoolDb数据库成功打开);/显示成功连接消息 sqlCon.Close();/关闭连接 catch(SqlException err)/捕获连接过程中的异常 Resp

9、onse.Write(err.Message);/显示异常信息,7.4.4 关闭数据库连接,完成数据库操作后应及时关闭,使连接被回收到连接池中。缺少该关闭语句:页面的语法和执行都没有影响,甚至于某些情况下会自动关闭连接,但可能会造成数据库连接资源的浪费,甚至会出现连接不能返回到连接池的问题,使得可用的连接资源越来越少,影响系统的运行和响应速度。关闭数据源的方法:Connection类的Close或Dispose方法,关闭连接的同时该Connection对象失效。显式关闭连接:可以更高效地使用本机资源,增强可伸缩性并提高应用程序的总体性能。需要养成良好的习惯,对象在使用之前要创建,使用之后要及时

10、撤销,释放所占用的资源,并可以实现名称的重用。,连接池,数据提供程序,.NET 数据提供程序的四个核心对象,7.5 Command类-执行数据库操作,ADO.NET提供两种操作数据库的方法:(1)直接对数据库进行操作 使用Command对象直接与数据源通信,并执行数据操作命令(执行SELECT、INSERT、UPDATE或DELETE之类的SQL语句,调用存储过程或从特定表中取得记录),完成数据库的操作和处理,若该命令返回结果(一组记录),则可使用数据读取器对象获取数据。(2)使用DataSet间接对数据库进行操作 先在内存中创建要使用记录的存储区(DataSet),再用DataAdapter

11、将要操作的数据记录加载到DataSet以操作数据,并可使用DataAdapter将数据的更新写回到数据库。,7.5.1 创建SqlCommand对象,(1)四类Command对象 SqlCommand OleDbCommand OdbcCommand OracleCommand(2)SqlCommand的属性 CommandText:获取或设置要对数据源执行的 SQL 语句、存储过程或表(与CommandType属性配合使用),返回类型为string CommandType:属性值默认为Text(SQL语句)、StoredProcedur(存储过程调用)与TableDirect(要读取的表),

12、CommandTimeOut:获取或设置在终止执行命令的尝试并生成错误之前的等待时间,其返回类型为int。Connection:获取或设置SqlCommand实例使用的 SqlConnection对象,其返回类型为string。Parameters:取得提供给命令的参数(采用参数命令时有效),其返回类型为SqlParameterCollection。,(3)SqlCommand的方法ExecuteNonQuery():执行不返回结果集的SQL语句,返回类型为int,代表该命令影响的记录行数 ExecuteReader():执行有返回结果的数据操作,返回含有SqlDataReader的结果集Ex

13、ecuteScalar():执行返回单值的SELECT语句ExecuteXmlReader():执行返回XML数据的SELECT语句,返回类型为包括有结果集的XmlReader,只适用于SqlCommand类Cancel():取消命令的执行,返回类型为voidCreateParameter():创建SqlParameter对象的实例,返回类型为SqlParameter,(4)SqlCommand对象的生成SqlCommand的构造函数SqlConnection的CreateCommand()用构造函数生成SqlCommand对象 SqlCommand()SqlCommand(string Co

14、mmandText)SqlCommand(string CommandText,SqlConnection sqlCon),使用SqlCommand对象之前,首先要确定与之关联的连接信息和命令信息,7.5.1 创建SqlCommand对象,调用SqlConnection对象的CreateCommand方法生成SqlCommand对象SqlConnection sqlCon=new SqlConnection(“连接字符串);sqlCon.CreateCommand();/此方法返回新的SqlCommand对象,7.5.2 7 ExecuteReader方法,ExecuteReader():返回

15、值是包含有操作结果记录集的DataReader对象,常用于Select语句等有返回结果的操作命令。【例】使用ExecuteReader方法执行数据库查询 创建SqlConnection对象和 SqlCommand对象,执行 SqlComand对象的ExecuteReader 方法,以表格的样式显示 返回的结果记录集。,/创建Connection对象,设置连接字符串,并打开连接SqlConnection sqlCon=new SqlConnection();sqlCon.ConnectionString=Data Source=CHINA-F42FC5492;Database=SchoolDb;

16、Uid=sa;Pwd=123;sqlCon.Open();/创建Command对象,设置连接和命令信息SqlCommand sqlCom=new SqlCommand();sqlCom.Connection=sqlCon;sqlCom.CommandText=select*from stuInfo;/执行SQL语句,并返回结果记录集到SqlDataReader对象SqlDataReader sqlDr=sqlCom.ExecuteReader();/以表格形式输出数据/先输出表头标记Response.Write(学号姓名性别年龄专业);/再输出刚查询到的数据结果,构建表格内容,while(sq

17、lDr.Read()/读取SqlDataReader记录集中的一行记录 string strtbl=;/构造表格的行 strtbl=strtbl+sqlDr.GetValue(0).ToString()+;strtbl=strtbl+sqlDr.GetValue(1).ToString()+;if(!sqlDr.IsDBNull(2)/判断性别信息是否为空 if(sqlDr.GetBoolean(2)strtbl=strtbl+男;else strtbl=strtbl+女;else strtbl=strtbl+/关闭Connection对象,7.5.3 7 ExecuteNonQuery方法,

18、数据定义语言(DDL):更新Update、插入Insert、删除Delete等SQL语句的执行是没有返回结果的没有必要用DataReader对象来接收,此时需使用Command类ExecuteNonQuery()方法执行无返回结果集的命令。该方法返回的int整型数值,表明此次操作影响的记录行数。【例】使用ExecuteNonQuery方法执行数据库更新 创建SqlConnection对象 和SqlCommand对象,执行 ExecuteReader方法并显示返 回的结果记录集。,/Connection对象SqlConnection sqlCon=new SqlConnection();sqlC

19、on.ConnectionString=Data Source=CHINA-F42FC5492;Database=SchoolDb;Uid=sa;Pwd=123;sqlCon.Open();/Command对象SqlCommand sqlCom=new SqlCommand();sqlCom.Connection=sqlCon;sqlCom.CommandText=Update stuInfo Set age=age+1;int intNum=sqlCom.ExecuteNonQuery();/执行,并返回更/新的记录个数/结果输出Response.Write(共更新了+intNum.ToSt

20、ring()+条记录!);sqlCon.Close();,7.5.4 执行参数化查询技术,利用Command执行SQL语句时,所使用的SQL语句需要预先设计好,即设置好CommandText属性在编写代码时,并不能确定所要执行SQL语句的全部内容如进行数据记录更新或添加时,记录的字段值需要从用户界面获取,只有在页面执行时才能确定参数化查询:使用命令参数在页面运行时与用户交互取得所需数值,对数据的操作更加灵活实用。命令参数:以字符开始,书写在CommandText中SQL语句:Insert Into stuInfo(s_no,s_name,gender,age,major)Values(no,n

21、ame,gender,age,major)中,使用了5个命令参数,分别为一条数据记录的5个字段赋值。这些参数的属性设置则在Command对象的Parameters子对象中设置,使用Parameters子对象的Add()方法来添加命令参数,使用命令参数的Value属性设置参数的值。,7.5.4 执行参数化查询技术,【例】使用命令参数实现数据记录的添加,/获取用户界面学生信息 string strSno=txtSno.Text.Trim();string strName=txtName.Text.Trim();string strGender=txtGender.Text.Trim();strin

22、g strAge=txtAge.Text.Trim();string strMajor=txtMajor.Text.Trim();/SqlConnection对象 SqlConnection sqlCon=new SqlConnection();sqlCon.ConnectionString=Data Source=CHINA-F42FC5492;Database=SchoolDb;Uid=sa;Pwd=123;sqlCon.Open();/SqlCommand对象 SqlCommand sqlCom=new SqlCommand();sqlCom.Connection=sqlCon;sqlC

23、om.CommandText=?sqlCom.ExecuteNonQuery();/输出结果 Response.Write(该学生记录成功添加);sqlCon.Close();,/设置Insert语句 string strSql=Insert Into stuInfo(s_no,s_name,gender,age,major);strSql=strSql+Values(no,name,gender,age,major);/为参数设置数据类型 sqlCom.Parameters.Add(no,SqlDbType.NChar,10);sqlCom.Parameters.Add(name,SqlDb

24、Type.VarChar);sqlCom.Parameters.Add(gender,SqlDbType.Bit);sqlCom.Parameters.Add(age,SqlDbType.Int);sqlCom.Parameters.Add(major,SqlDbType.VarChar);/为参数设置值 sqlCom.Parameters0.Value=strSno;sqlCom.Parameters1.Value=strName;if(strGender=男)sqlCom.Parameters2.Value=1;else if(strGender=女)sqlCom.Parameters2.

25、Value=0;else sqlCom.Parameters2.Value=Convert.DBNull;if(strAge!=)sqlCom.Parameters3.Value=Convert.ToInt16(strAge);else sqlCom.Parameters3.Value=Convert.DBNull;sqlCom.Parameters4.Value=strMajor;/设置SqlCommand的命令文本 sqlCom.CommandText=strSql;,数据提供程序,.NET 数据提供程序的四个核心对象,7.6 DataReader类-读取数据,DataReader是ADO

26、.NET数据提供程序的核心元素之一,主要是用来读取查询执行后返回的数据结果,存储在客户端的网络缓冲存储区中,被设计为只读只进的数据流,可实现快速访问数据,并占用较少的服务器资源DataReader对象读取记录时通常比从DataSet更快,效率更高但功能有限,7.6.1 创建DataReader对象,DataReader类有四种,分别对应于相应的Connection连接对象,实现数据库有返回结果操作的数据读取 SqlDataReader OleDbDataReader OdbcDataReader OracleDataReader,(1)SqlDataReader类的属性 HasRows:指示该

27、SqlDataReader对象是否包含一行或多行记录,返回类型为bool。Depth:当前行嵌入的深度,返回类型为int。FieldCount:当前行的列数(字段数),返回类型为int。IsColsed:表示是否关闭数据读取,返回类型为bool。RecordsAffected:执行增加、修改或删除操作的记录行数,返回类型为int。,(2)SqlDataReader类的方法 Read():用于将SqlDataReader移到结果集的下一行并读取该行 GetValue():返回指定列的值,其返回类型为object GetValues():将当前行中所有列的值复制到指定对象数组其返回类型为int N

28、extResult():将SqlDataReader移到结果集的下一行,返回类型为bool,表示结果集中是否有多行。Close():关闭SqlDataReader对象 GetInt32()、GetChar()、GateDataTime()、Get():返回指定列的值,并且返回的类型为相应的数据类型。,(3)SqlDataReader类的创建 DataReader类是从一个数据源中选择某些数据的最简单快捷的方法,但也是功能最弱的一个方法。不能直接实例化DataReader对象,只能通过调用ExecuteReader()方法后从相应数据库的Command命令对象中返回。基本代码如下:SqlData

29、Reader sqlDr=sqlCom.ExecuteReader();其中,标识符sqlCom是SqlCommand对象,标识符sqlDr是SqlDataReader对象。,7.6.2 用DataReader读取数据技术,【例】使用SqlDataReader对象读取数据扩展查询条件,按用户提交的信息进行数据库查询,并显示查询结果,/Connection对象SqlConnection sqlCon=new SqlConnection();sqlCon.ConnectionString=Data Source=CHINA-F42FC5492;Database=SchoolDb;Uid=sa;Pw

30、d=123;sqlCon.Open();/Command对象 SqlCommand sqlCom=new SqlCommand();sqlCom.Connection=sqlCon;sqlCom.CommandText=?;SqlDataReader sqlDr=sqlCom.ExecuteReader();/读数据,并显示sqlDr.read()?sqlCon.Close();,/获取页面上用户的查询条件string strSno=txtSno.Text.Trim();string strName=txtName.Text.Trim();string strGender=txtGender.

31、Text.Trim();string strAge=txtAge.Text.Trim();string strMajor=txtMajor.Text.Trim();/用字符串strSql构造SQL语句string strSql=select*from stuInfo where;if(strSno!=)strSql=strSql+s_no=+strSno+and;if(strName!=)strSql=strSql+s_name=+strName+and;if(strGender!=)if(strGender=男)strSql=strSql+gender=1 and;else strSql=s

32、trSql+gender=0 and;if(strAge!=)strSql=strSql+age=+strAge+and;if(strMajor!=)strSql=strSql+major=+strMajor+and;strSql=strSql+1=1;/将字符串strSql赋给sqlCom.CommandText属性sqlCom.CommandText=strSql;,if(sqlDr.HasRows)/判断是否有返回结果 Response.Write(“学号姓名 性别年龄专业);while(sqlDr.Read()string strtbl=;/构造表格的行 strtbl=strtbl+s

33、qlDr.GetValue(0).ToString()+;strtbl=strtbl+sqlDr.GetValue(1).ToString()+;if(sqlDr.GetSqlBoolean(2)strtbl=strtbl+男;else strtbl=strtbl+女;strtbl=strtbl+sqlDr.GetValue(3).ToString()+;strtbl=strtbl+sqlDr.GetValue(4).ToString()+;strtbl=strtbl+;/设置表格每行的标记 Response.Write(strtbl);/输出每行的标记语言 else Response.Write(没有满足条件的记录!);sqlDr.Close();/关闭SqlDataReader对象,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 建筑/施工/环境 > 农业报告


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号