




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第第8章章 ADO.NET数据访问数据访问8.1 ADO.NET概述概述8.2 建立数据库连接建立数据库连接Connection对象对象8.3 使用使用Command对象执行数据库命令对象执行数据库命令8.4 连线模式数据访问连线模式数据访问DataReader对象对象8.5 离线模式数据库访问离线模式数据库访问 常用格式:常用格式:Select * from 表名表名 Where 条件条件模糊查询:模糊查询:Select * from 表名表名 Where 字段名字段名 like %条件条件%使用使用数据源控件和数据绑定控件数据源控件和数据绑定控件,几乎无需编写,几乎无需编写任何代码就可以实
2、现对数据库的一般操作,但灵任何代码就可以实现对数据库的一般操作,但灵活性差。活性差。在在.NET中,除了可以使用控件完成数据库的操作中,除了可以使用控件完成数据库的操作外,还可以使用外,还可以使用ADO.NET技术技术,通过编写代码自,通过编写代码自由地实现对数据库的各种操作。由地实现对数据库的各种操作。在在Microsoft的的.NET编程环境中使用的数据访问接编程环境中使用的数据访问接口技术口技术是是.NET Framework中不可缺少的一部分中不可缺少的一部分一组向一组向.NET程序员公开数据访问服务的类程序员公开数据访问服务的类提供了对关系数据、提供了对关系数据、XML和应用程序数据
3、的访问和应用程序数据的访问最大连接数是指数据库能承受的最大连接数是指数据库能承受的最大并发访最大并发访问数量问数量微软在微软在MSDN上对最大连接数的定义是:上对最大连接数的定义是:“默认是默认是0,代表不限制,但最大连接数是,代表不限制,但最大连接数是32767”。连线模式连线模式数据库访问(持久连接)数据库访问(持久连接)离线模式离线模式数据库访问(非持久连接)数据库访问(非持久连接)ConnectionConnection对象对象CommandCommand对象对象DataReaderDataReader对象对象DataAdapterDataAdapter对象对象DataSetDataS
4、et对象对象 数据集数据集数据提供器数据提供器准确地说,准确地说,ADO.NET是由很多类组成的一个类是由很多类组成的一个类库。这些类提供了众多对象,分别用来完成和数据库。这些类提供了众多对象,分别用来完成和数据库的连接、查询、插入、更新和删除等操作。其中库的连接、查询、插入、更新和删除等操作。其中主要包括主要包括5个个对象。对象。142022-4-14 Connection对象:用来对象:用来连接到数据库连接到数据库。 Command对象:用来对数据库对象:用来对数据库执行执行 SQL命令命令。 DataReader对象:用来从数据库对象:用来从数据库返回只读数据返回只读数据。 DataAd
5、apter对象:用来从数据库返回数据,并送对象:用来从数据库返回数据,并送到到 Dataset对象中,还要负责保证对象中,还要负责保证Dataset对象中的对象中的数据和数据库中的数据保持一致。数据和数据库中的数据保持一致。 DataSet对象:它可以看做是内存中的数据库。利用对象:它可以看做是内存中的数据库。利用 DataAdapter对象将数据库中的数据送到该对象中,对象将数据库中的数据送到该对象中,然后就可以在其中对数据进行各种操作,最后再利然后就可以在其中对数据进行各种操作,最后再利用用DataAdapter对象将更新反映到数据库中。对象将更新反映到数据库中。152022-4-14这这
6、5个对象提供了两种读取数据库的方式。个对象提供了两种读取数据库的方式。一种是利用一种是利用Connetction、Command和和 DataReader对象,如果只是想查询记录的话,这种方式的效率对象,如果只是想查询记录的话,这种方式的效率更高些。更高些。 (连线模式)(连线模式)第 二 种 是 利 用第 二 种 是 利 用 C o n n e c t i o n 、 C o m m a n d 、DataAdapter和和Dataset对象,这种方式更灵活,可对象,这种方式更灵活,可以 对 数 据 库 进 行 各 种 操 作 。以 对 数 据 库 进 行 各 种 操 作 。 ( 离 线 模
7、 式 )( 离 线 模 式 )162022-4-14172022-4-14n使用使用ADO.NET技术访问技术访问SQL Server数据库,需要导入数据库,需要导入命名空间:命名空间:System.Data.SqlClientn操作操作SQL Server 数据库的数据库的5个对象名及功能如下表所示:个对象名及功能如下表所示:对象对象SQL ServerSQL Server数据库数据库功能功能ConnectionSqlConnectionSqlConnection连接数据库连接数据库CommandSqlCommandSqlCommand对数据库执行命令对数据库执行命令DataReaderSq
8、lDataReaderSqlDataReader返回只读结果返回只读结果DataAdapterSqlDataAdapterSqlDataAdapter数据适配器数据适配器DataSetDataSetDataSet支持离线模式支持离线模式182022-4-14Connection对象提供与数据源的连接。要存取数据源对象提供与数据源的连接。要存取数据源内的数据,首先要建立程序和数据源之间的连接。内的数据,首先要建立程序和数据源之间的连接。(1)ConnectionString:获取或设置用于打开数据库:获取或设置用于打开数据库的字符串,包括的字符串,包括(2)State:获取连接的当前状态获取连接
9、的当前状态(1)Open()方法:用于打开由()方法:用于打开由ConnectionString属性指定的数据源连接属性指定的数据源连接(2)Close()方法:关闭数据源连接()方法:关闭数据源连接创建一个创建一个connection对象对象 SqlConnection conn=new SqlConnection();设置设置Connection对象的连接字符串属性对象的连接字符串属性 conn. ConnectionString=“”;打开或关闭数据库连接打开或关闭数据库连接 conn.Open(); 为了连接到数据源,需要一个连接字符串。连接为了连接到数据源,需要一个连接字符串。连接字
10、符串通常由字符串通常由分号分号隔开的名称和值组成隔开的名称和值组成,它指定数,它指定数据库运行库的设置。连接字符串中包含的典型信息据库运行库的设置。连接字符串中包含的典型信息包括包括数据库的名称、服务器的位置和用户的身份。数据库的名称、服务器的位置和用户的身份。程序员可以方便地程序员可以方便地更改服务器名称、更改服务器名称、数据库或身份验证数据库或身份验证信息,而无须逐个信息,而无须逐个修改程序。修改程序。Conn.ConectionString Conn.ConectionString =Data Source=.SQLEXPRESS; =Data Source=.SQLEXPRESS; A
11、ttachDbFilename=|DataDirectory|AttachDbFilename=|DataDirectory|* *.mdf;.mdf; Integrated Security=True; Integrated Security=True; User Instance=True User Instance=True 下面以查询下面以查询student表数据为例介绍如何打开和关闭数据库。表数据为例介绍如何打开和关闭数据库。代码如下。代码如下。 protected void Page_Load(object sender, EventArgs e)SqlConnection con
12、n = new SqlConnection(); String strCon = Data Source=.SQLEXPRESS;AttachDbFilename=|DataDirectory|Db.mdf;Integrated Security=True;User Instance=True;conn.Connectionstring=strCon; conn.Open();/打开数据库连接打开数据库连接/操作数据源操作数据源conn.Close();/关闭数据库连接关闭数据库连接 上述是典型的数据库连接代码,常在上述是典型的数据库连接代码,常在Web.Config文件中存放数文件中存放数据
13、库的连接信息。据库的连接信息。 将数据库连接字符串存放在应用程序的配置文件将数据库连接字符串存放在应用程序的配置文件(即(即Web.Config)中,代码如下。)中,代码如下。 add name=“连接字符串名连接字符串名” connectionString=“数数据库的连接字符串据库的连接字符串” providerName=“System.Data.SqlClient” 在程序中获得在程序中获得连接字符串的方法如下:连接字符串的方法如下: conn.ConnectionString =System.Configuration.ConfigurationManager. ConnectionS
14、tringsconstr2.ToString();连接字连接字符串名符串名 将数据库连接字符串存放在新建的一个类的方法中,例如可将此类命名为将数据库连接字符串存放在新建的一个类的方法中,例如可将此类命名为MyClass,并在这个类中编写如下代码。并在这个类中编写如下代码。public class MyClass private string constr =“ Data Source=.SQLEXPRESS; Data Source=.SQLEXPRESS; AttachDbFilename=|DataDirectory|AttachDbFilename=|DataDirectory|* *.
15、mdf;.mdf; Integrated Security=True;User Instance=True Integrated Security=True;User Instance=True public string strCon /定义为只读属性定义为只读属性 get return constr; 在引用此数据库连接信息时,首先要在应用程序中创在引用此数据库连接信息时,首先要在应用程序中创建这个新类的一个方法,然后再初始化连接对象,代建这个新类的一个方法,然后再初始化连接对象,代码如下。码如下。 SqlConnection conn = new SqlConnection(); MyC
16、lass mc = new MyClass(); conn.ConnectionString = mc.strCon; 在创建数据库连接时,建议使用在创建数据库连接时,建议使用Using语句块语句块;其作用为其作用为:定义一个:定义一个范围范围,在范围结束时处理对象,在范围结束时处理对象(当离开包含的代码段时自动调用该类实例的(当离开包含的代码段时自动调用该类实例的Dispose()方法,自动关闭数据库连接且释放连()方法,自动关闭数据库连接且释放连接所使用的资源);接所使用的资源); 如果需要使用一个对象,这个对象需要占用很多如果需要使用一个对象,这个对象需要占用很多紧缺的资源,使用完成后需
17、要马上释放掉的话,建紧缺的资源,使用完成后需要马上释放掉的话,建议使用议使用using语句;语句; 优势优势:可以避免资源释放不及时导致的冲突或性:可以避免资源释放不及时导致的冲突或性能问题。能问题。 using (SqlConnection conn=new SqlConnection() )using (SqlConnection conn=new SqlConnection() ) conn.ConnectionString=“” conn.ConnectionString=“”; conn.Open(); conn.Open(); /此处无需再关闭连接(因已自动关闭并释放了资源)此处无
18、需再关闭连接(因已自动关闭并释放了资源)lClose()方法只是关闭了连接,但是这个连接被方法只是关闭了连接,但是这个连接被存储到连接池,所以在调用存储到连接池,所以在调用Close()方法以后,方法以后,还可以再通过还可以再通过 Open()方法打开数据连接。方法打开数据连接。l调用调用Dispose()方法以后,数据连接就不能再使方法以后,数据连接就不能再使用了(再使用用了(再使用Open()方法会报错)。方法会报错)。说明:再给说明:再给connectionString重新赋值才能打开重新赋值才能打开数据连接。数据连接。292022-4-14Command对象最主要的工作是通过对象最主要
19、的工作是通过Connection对对象对数据源下达象对数据源下达操作数据库操作数据库的命令。使用户能够访的命令。使用户能够访问用于返回数据、修改数据运行存储过程以及发送问用于返回数据、修改数据运行存储过程以及发送或检索参数信息的数据库命令。或检索参数信息的数据库命令。 下列语法产生下列语法产生 Command对象:对象:SqlCommand com = new SqlCommand(string ,conn);要执行的要执行的SQLSQL语句语句已建立的已建立的Connection对象对象312022-4-14ExecuteNonQuery:执行不返回任何行的命令。:执行不返回任何行的命令。典
20、型的例子是实现典型的例子是实现插入、更新和删除插入、更新和删除。 ExecuteReader:通过:通过Connection对象下达命令至对象下达命令至数据源,将数据作为一个数据源,将数据作为一个 DataReader 对象返回。对象返回。用于用于任何返回数据的任何返回数据的 SQL 查询查询; ExecuteScalar:从数据库中返回单独值,例如与:从数据库中返回单独值,例如与特定查询相匹配的记录数特定查询相匹配的记录数,或者数据库功能调用,或者数据库功能调用的结果。的结果。 ExecuteNonQuery方法执行更新操作,诸如那些与方法执行更新操作,诸如那些与UPDATE、INSERT和
21、和DELETE语句有关的操作,语句有关的操作,该方法返回一个整型(该方法返回一个整型(Integer)数据,)数据,返回值是命返回值是命令影响的行数。令影响的行数。例如,创建一个例如,创建一个SqlCommand,然后使用,然后使用ExecuteNonQuery方法执行方法执行SQL语句,如:语句,如:UPDATE、INSERT或或DELETE。【例例1】 使用使用ExecuteNonQuery方法向数据库中插方法向数据库中插入记录。入记录。 1、建立建立数据源连接数据源连接对象并打开:对象并打开: con=new SqlConnection() ; con.Open();2、建立、建立命令对
22、象命令对象: com=new SqlCommand(要执行的要执行的SQL语句,语句,con );3、执行命令对象的执行命令对象的ExecuteNonQuery()方法方法 com. ExecuteNonQuery();4、断开数据源断开数据源 con.Close();ExecuteReader方法通常与方法通常与查询命令查询命令一起使用,并一起使用,并且返回一个数据阅读器对象且返回一个数据阅读器对象DataReader,该对象连,该对象连接到数据库的结果集上,并允许行检索。接到数据库的结果集上,并允许行检索。数据阅读器是一种数据阅读器是一种只读的、向前移动的游标只读的、向前移动的游标,客户,
23、客户端代码滚动游标并从中读取数据。端代码滚动游标并从中读取数据。 SqlCommand com = new SqlCommand(queryString, connection);/通过通过ExecuteReader方法创建方法创建DataReader对象对象SqlDataReader dr = com.ExecuteReader();if (dr.Read() / else / 使用使用DataReader对象中的对象中的Read方法方法用来遍历整个结果集,不需要显式地向用来遍历整个结果集,不需要显式地向前移动指针,或者检查文件的结束,如前移动指针,或者检查文件的结束,如果没有要读取的记录了
24、,则果没有要读取的记录了,则Read方法会方法会自动返回自动返回False。【例例2】 使用使用ExecuteReader方法将性别为方法将性别为“女女”性性的记录显示在的记录显示在GridView控件中。控件中。 注意:注意:DataReader对象不能用对象不能用new运算符生运算符生成,只能使用成,只能使用Command对象的对象的ExecuteReader()方法来创建。方法来创建。SqlDataReader dr=cmd.ExecuteReader();Command对象对象1、建立数据源连接对象:、建立数据源连接对象: SqlConnection con2、打开数据源:、打开数据源
25、:con.Open();3、执行数据访问命令:、执行数据访问命令:SqlCommand cmd = new SqlCommand();4、加载数据行流:、加载数据行流: SqlDataReader dr =cmd.ExecuteReader(); 5、读取数据行流:、读取数据行流:while (dr.Read() 或或 if (dr.Read() 6、关闭数据行流:、关闭数据行流: dr.Close();7、关闭、关闭断开断开数据源:数据源: con.Close();执行查询,并返回结果集中执行查询,并返回结果集中第一行的第一列的值。第一行的第一列的值。如果只想检索数据库信息中的一个值,而不需
26、要返如果只想检索数据库信息中的一个值,而不需要返回表或数据流形式的数据库信息。回表或数据流形式的数据库信息。例如,只需要返例如,只需要返回回 COUNT(*)、SUM( ) 或或 AVG( ) 等函数的结果等函数的结果,那么那么Command对象的对象的ExecuteScalar方法就很有用。方法就很有用。如果在一个常规查询语句当中调用该方法,则只读如果在一个常规查询语句当中调用该方法,则只读取第一行第一列的值,而丢弃所有其他值。取第一行第一列的值,而丢弃所有其他值。在数据库在数据库colledge.mdf中,有一个中,有一个teacher表如下表如下所示:所示:窗体上有一文本框(名称为窗体上
27、有一文本框(名称为TextBox1)TextBox1)和一命令按钮和一命令按钮( (名称名称为为Button1)Button1),有如下代码:,有如下代码: SqlConnection conn = new SqlConnection();SqlConnection conn = new SqlConnection();conn.ConnectionString =Data Source=.SQLEXPRESS; conn.ConnectionString =Data Source=.SQLEXPRESS; AttachDbFilename=|DataDirectory| colledge.m
28、df;AttachDbFilename=|DataDirectory| colledge.mdf; Integrated Security=True;User Instance=True; Integrated Security=True;User Instance=True; conn.Open(); conn.Open(); string sql = select count( string sql = select count(* *) from teacher where ) from teacher where 年年龄龄35;35;/string sql = select /stri
29、ng sql = select * * from teacher where from teacher where 年龄年龄35; 35; /常规查询,返回结果集中第常规查询,返回结果集中第1 1行第行第1 1列的值列的值 SqlCommand com = new SqlCommand(sql, conn); SqlCommand com = new SqlCommand(sql, conn); TextBox1.Text = com.ExecuteScalar().ToString(); TextBox1.Text = com.ExecuteScalar().ToString(); conn
30、.Close();conn.Close();程序执行后,文本框显示的内容?程序执行后,文本框显示的内容?当当Command 对象返回结果集时,需要使用对象返回结果集时,需要使用DataReader对象来检索数据。对象来检索数据。DataReader 对象返对象返回一个来自回一个来自Command 的只读的、只能向前的数据的只读的、只能向前的数据流。流。在与数据库的交互中,要获得数据访问的结果可在与数据库的交互中,要获得数据访问的结果可用用两种两种方法来实现,第一种是通过方法来实现,第一种是通过DataReader对对象从数据源中获取数据并进行处理;第二种是通象从数据源中获取数据并进行处理;第二
31、种是通过过DataSet对象将数据放置在内存中进行处理。对象将数据放置在内存中进行处理。连线模式数据访问连线模式数据访问DataReaderDataReader对象对象GetName:取得指定字段的字段名称:取得指定字段的字段名称GetValue:取得指定字段的数据:取得指定字段的数据Read :让:让DataRead对象读取下一条记录,如果对象读取下一条记录,如果有记录返回有记录返回True,否则返回,否则返回False。Close :关闭:关闭DataRead对象,注意,关闭阅读器对象,注意,关闭阅读器对象不会自动关闭底层连接。对象不会自动关闭底层连接。HasRows:指示:指示 Data
32、Reader 是否包含一行或多是否包含一行或多行。在读取记录集内容以前使用这个属性来判断行。在读取记录集内容以前使用这个属性来判断记录集中是否有记录。记录集中是否有记录。FieldCount:获取当前行中的字段数:获取当前行中的字段数注意:注意:DataReader对象不能用对象不能用new运算符生成,运算符生成,只能使用只能使用Command对象的对象的ExecuteReader()方法方法来创建。来创建。SqlCommand cmd= new SqlCommand( SELECT *FROM Customers ,conn); /查询查询Customers表表SqlDataReader d
33、r=cmd.ExecuteReader();While(dr.Read() /循环读取数据循环读取数据 dr.Close(); /关闭关闭DataReader对象对象在数据库在数据库colledge.mdf中,有一个中,有一个teacher表,如表所示。在表,如表所示。在窗体上有一个按钮(其窗体上有一个按钮(其ID为为Button1)和一个列表框(其)和一个列表框(其ID为为ListBox1)。程序运行后,单击命令按钮,列表框中的)。程序运行后,单击命令按钮,列表框中的内容是什么?内容是什么? SqlConnection conn = new SqlConnection();SqlConnec
34、tion conn = new SqlConnection();conn.ConnectionString =Data Source=.SQLEXPRESS; conn.ConnectionString =Data Source=.SQLEXPRESS; AttachDbFilename=|DataDirectory| colledge.mdf;AttachDbFilename=|DataDirectory| colledge.mdf; Integrated Security=True;User Instance=True; Integrated Security=True;User Inst
35、ance=True; conn.Open(); conn.Open(); string strsql = select string strsql = select * * from teacher where from teacher where 姓名姓名 like like %王王%;%; SqlCommand com = new SqlCommand(strsql, conn); SqlCommand com = new SqlCommand(strsql, conn); SqlDataReader dr = com.ExecuteReader(); SqlDataReader dr =
36、 com.ExecuteReader(); while (dr.Read() while (dr.Read() ListBox1 .Items .Add (dr ListBox1 .Items .Add (dr姓名姓名.ToString(); .ToString(); conn.Close(); conn.Close();获取查询结果获取查询结果中的中的”姓名姓名”字段值字段值上例中,用户登录时输入任意用户名,密码为:上例中,用户登录时输入任意用户名,密码为: 1 or 1=1则能够成功登录则能够成功登录分析:分析:形成的查询语句为:形成的查询语句为:select * from T_users
37、 where uname=dd and password=1 or 1=1 可见执行可见执行com.ExecuteReader()方法时会返回所有记录方法时会返回所有记录 当应用程序使用输入内容来构造动态当应用程序使用输入内容来构造动态sql语句以访语句以访问数据库时,会发生问数据库时,会发生sql注入攻击注入攻击 。使用二种方法使用二种方法均可均可参数化查询是指在与参数化查询是指在与数据库数据库连接并访问数据时,连接并访问数据时,在在需要填入数据的地方,需要填入数据的地方,使用参数使用参数 (Parameter) 来给来给值值,该方法可以有效预防,该方法可以有效预防SQL注入攻击注入攻击 。
38、原理:在使用参数化查询的情况下,原理:在使用参数化查询的情况下,数据库数据库服务器服务器不会将参数的内容视为不会将参数的内容视为SQL指令的一部分来处理,指令的一部分来处理,而是在数据库完成而是在数据库完成 SQL 指令的编译后,才套用参指令的编译后,才套用参数运行,因此即使参数中含有恶意的指令,由于已数运行,因此即使参数中含有恶意的指令,由于已经编译完成,就不会被数据库所运行。经编译完成,就不会被数据库所运行。Microsoft SQL Server 的的参数格式是以参数格式是以 “” 字符字符加上参数名称而构成加上参数名称而构成。 SELECT SELECT * * FROM myTabl
39、e WHERE myID = myID FROM myTable WHERE myID = myID INSERT INTO INSERT INTO 表表 (c1, c2, c3) VALUES (c1, c2, c3) (c1, c2, c3) VALUES (c1, c2, c3) com.Parameters.Add(“c1”, 值值1); / 设定参数设定参数 c1 的值。的值。 com.Parameters.Add(“c2”, 值值2); / 设定参数设定参数 c2 的值。的值。 com.Parameters.Add (“c3”, 值值3); / 设定参数设定参数 c3 的值。的值。
40、 (1)客户端请求数据客户端请求数据(2)向数据库服务器提交请求向数据库服务器提交请求(4)浏览器浏览器应用程序应用程序服务器服务器数据库数据库服务器服务器数据集数据集(3)将数据发将数据发送到数据集送到数据集(4)数据集传数据集传送到客户端送到客户端(5)客户端修客户端修改数据集改数据集(6)修改后修改后的数据集的数据集传递到服传递到服务器务器SqlConnection conn = new SqlConnection();SqlConnection conn = new SqlConnection();conn.ConnectionString = “” ;/conn.Connection
41、String = “” ;/设置连接字符串设置连接字符串SqlCommand com = new SqlCommand(select SqlCommand com = new SqlCommand(select * * from from T_student, conn);T_student, conn); /操作在打开和操作在打开和关闭关闭数据库之间数据库之间conn.Open();conn.Open();SqlDataReader dr = com.ExecuteReader();SqlDataReader dr = com.ExecuteReader(); while (dr.Read(
42、) while (dr.Read() Response.Write(dr“sname.ToString() + ); Response.Write(dr“sname.ToString() + ); dr.Close();dr.Close();conn.Close();conn.Close(); SqlDataAdapter da=new SqlDataAdapter (select SqlDataAdapter da=new SqlDataAdapter (select * * from from T_student,conn );T_student,conn );/conn.Open();/
43、conn.Open();DataSet ds=new DataSet();DataSet ds=new DataSet();da.Fill(ds) da.Fill(ds) /Fill/Fill方法在执行时,若数据库连接未打开,则自动方法在执行时,若数据库连接未打开,则自动打开打开, ,且数据填充到数据集后,自动将连接关闭且数据填充到数据集后,自动将连接关闭/conn.Close();/conn.Close(); / /处理数据在处理数据在连接连接关闭关闭时时 for (int i=0; ids.Tables0.Rows.Count; i+)for (int i=0; ids.Tables0.R
44、ows.Count; i+) Response.Write (ds.Tables0.Rowsi“sname.ToString Response.Write (ds.Tables0.Rowsi“sname.ToString ()+)()+) da.Update (ds); da.Update (ds); /数据集中数据有变化时,使用数据集中数据有变化时,使用Update方法更新方法更新数据源,数据源,Update在执行时,若数据库连接未打开,则自动打开在执行时,若数据库连接未打开,则自动打开数数据连接,且更新数据源后自动关闭数据连接据连接,且更新数据源后自动关闭数据连接 对应对应数据数据库服库服
45、务器务器对应对应 应应用程序用程序服务器服务器 数据集是包含数据集是包含数据表数据表的对象,可以在这些数据表中的对象,可以在这些数据表中临时存储数据以便在应用程序中使用。如果应用程临时存储数据以便在应用程序中使用。如果应用程序要求使用数据,则可以将该数据加载到数据集中,序要求使用数据,则可以将该数据加载到数据集中,数据集在本地内存中为应用程序提供了待用数据的数据集在本地内存中为应用程序提供了待用数据的缓存。即使应用程序从数据库断开连接,也可以使缓存。即使应用程序从数据库断开连接,也可以使用数据集中的数据。数据集维护有关其数据的更改用数据集中的数据。数据集维护有关其数据的更改的信息,因此可以跟踪
46、数据更新,并在应用程序重的信息,因此可以跟踪数据更新,并在应用程序重新连接时将更新发送回数据库。新连接时将更新发送回数据库。断开式断开式ADO.NET数据库访问示例图数据库访问示例图 作用:使用作用:使用conn建立的数据连接,执行建立的数据连接,执行StrSel表示的表示的SQL语句。语句。例如:例如:string strsql = “select * from 表表 ;SqlCommand com=new SqlCommand (strsql ,conn); SqlDataAdapter da = new SqlDataAdapter();da.SelectCommand = com; F
47、ill Fill 方法使用方法使用 SELECT SELECT 语句从数据源中检索数语句从数据源中检索数据。与据。与 Select Select 命令关联的命令关联的 Connection Connection 对象必须有对象必须有效,效,但不需要将其打开但不需要将其打开。如果。如果 Fill Fill 方法发现连方法发现连接尚未打开,它将隐式地打开接尚未打开,它将隐式地打开 DataAdapter DataAdapter 正正在使用的在使用的 ConnectionConnection,然后再将其关闭。如果调,然后再将其关闭。如果调用用 Fill Fill 之前连接已打开,它将保持打开状态。之
48、前连接已打开,它将保持打开状态。l 默认情况下,数据集不包含任何实际数据。实际默认情况下,数据集不包含任何实际数据。实际上,用数据填充数据集指的是将数据加载到组成数上,用数据填充数据集指的是将数据加载到组成数据集的据集的 DataTable DataTable 对象中。可以通过执行对象中。可以通过执行 数据适数据适配器配器DataAdapterDataAdapter对象的对象的FillFill命令来命令来填充填充数据表数据表 。当数据集中的记录发生更改时,这些更改必须写回当数据集中的记录发生更改时,这些更改必须写回数据库。要将更改从数据集写入数据库,可调用负数据库。要将更改从数据集写入数据库,
49、可调用负责在数据集与相应的数据库之间通信的责在数据集与相应的数据库之间通信的 DataAdapter DataAdapter 的的 Update Update 方法方法更新数据源更新数据源。FDataAdapter对象对象.Update(数据集对象数据集对象,数据表名数据表名);FSqlCommandBuilder 对象名对象名=new SqlCommandBuilder(已创建的已创建的DataAdapter对象对象);DataSet相当于内存中的数据库,在命名空间相当于内存中的数据库,在命名空间System.Data中定义;中定义;DataAdapter相当于相当于DataSet和物理数据
50、源之间的桥梁。和物理数据源之间的桥梁。在在DataSet内部是一个或多个内部是一个或多个DataTable的集合,的集合, DataSet.Tables“表名表名”可获取数据集中的一个表。可获取数据集中的一个表。 在在DataTable 中执行的插入、更新和删除操作中执行的插入、更新和删除操作并不并不会自动写回数据库会自动写回数据库。如果想把更改写回数据库,则。如果想把更改写回数据库,则需要手动去完成,这个操作由需要手动去完成,这个操作由DataAdapter.UpdateDataAdapter.Update完成。完成。 DataTableCollection:表示:表示DataSet的表集合
51、。的表集合。 DataRelationCollection:表示此:表示此DataSet的的DataRelation对象的集合。对象的集合。 ExtendedProperties:获取用户定义的约束属性的:获取用户定义的约束属性的集合。集合。提示提示: DataSet中的各种集合,访问子项有两种方法中的各种集合,访问子项有两种方法,一种是用子项的名,一种是用数字索引。如要访问一种是用子项的名,一种是用数字索引。如要访问表表”student”,可以用,可以用: DataSet.Tables“student”或或DataSet.Tables0 访问访问 (多张表依次类推多张表依次类推) 填充数据。
52、第二个参数是数据集填充数据。第二个参数是数据集中内存表的名字,可以与数据库中内存表的名字,可以与数据库中的表名不同。中的表名不同。 protected void Button1_Click(object sender, EventArgs e) SqlConnection conn = new SqlConnection(); conn.ConnectionString = ; conn.Open(); string strsql = select * from teacher where 姓名姓名 like %王王%; SqlCommand com=new SqlCommand (strsq
53、l ,conn); SqlDataAdapter da = new SqlDataAdapter(); da.SelectCommand = com; DataSet ds = new DataSet(); da.Fill(ds); GridView1.DataSource = ds; GridView1 .DataBind (); DataAdapterDataAdapter填填充数据到数据集充数据到数据集(DataSetDataSet)中)中填充数据,填充数据,Fill方法其实是隐方法其实是隐藏的执行了命令对象藏的执行了命令对象(Command)的查询语句)的查询语句protected v
54、oid Button1_Click(object sender, EventArgs e)protected void Button1_Click(object sender, EventArgs e) SqlConnection conn = new SqlConnection(); SqlConnection conn = new SqlConnection(); conn.ConnectionString = conn.ConnectionString = ConfigurationManager.ConnectionStringsconstr.ToStrinConfigurationM
55、anager.ConnectionStringsconstr.ToString(); g(); string strsql = select string strsql = select * * from T_student; from T_student; SqlDataAdapter da = new SqlDataAdapter(strsql,conn); SqlDataAdapter da = new SqlDataAdapter(strsql,conn); DataSet ds = new DataSet(); DataSet ds = new DataSet(); da.Fill(
56、ds, student); da.Fill(ds, student); foreach (DataRow r in ds.Tablesstudent.Rows) foreach (DataRow r in ds.Tablesstudent.Rows) Response.Write(rsname.ToString() Response.Write(rsname.ToString()+);); DataSet DataSet 的结构和数据库相似,插入数据实质上就是的结构和数据库相似,插入数据实质上就是在在DataSet DataSet 的数据表里插入一行的数据表里插入一行(DataRow)(Dat
57、aRow)/新建一行新建一行DataRow dr= ds.Tables“T_student”.NewRow();DataRow dr= ds.Tables“T_student”.NewRow(); / /各字段赋值各字段赋值 dr“sno”=100020;dr“sno”=100020; dr “sname” = “ dr “sname” = “李四李四”; ;dr “math” =88;dr “math” =88;/将新建的行加到将新建的行加到DataTable DataTable 的的DataRowDataRow集合中集合中ds.Tables“T_student”.Rows.Add(dr);
58、ds.Tables“T_student”.Rows.Add(dr);注意:注意:对对DataSetDataSet的操作仅仅是在的操作仅仅是在DataSetDataSet中执行中执行, ,并并不影响数据库中的数据。不影响数据库中的数据。使用使用DataAdapter DataAdapter 的的 UpdateUpdate()方法可以将()方法可以将数据集中的结果更新回数据源。数据集中的结果更新回数据源。注意注意: DataAdapter : DataAdapter 对象在数据发生改变时对象在数据发生改变时, ,并并不能自动产生数据库系统所需的交易不能自动产生数据库系统所需的交易sqlsql语句语
59、句, ,所所以要建立一个以要建立一个CommandBuilder CommandBuilder 对象,它能自动对象,它能自动产生交易的产生交易的sqlsql语句。语句。SqlCommandBuilder custcb = new SqlCommandBuilder custcb = new SqlCommandBuilder(MyAdapter);SqlCommandBuilder(MyAdapter);填充数据。第二个参数是数据填充数据。第二个参数是数据集中内存表的名字,可以与数集中内存表的名字,可以与数据库中的不同,据库中的不同,Fill方法其实是方法其实是隐藏的执行了命令对象隐藏的执行了
60、命令对象(Command)的查询语句)的查询语句代码要点:代码要点:在上述代码里,首先使用在上述代码里,首先使用DataAdapter填充填充DataSet对象,然后通过对象,然后通过DataRow对象,向对象,向DataSet添加一添加一条记录,最后使用条记录,最后使用DataSet的的update方法将添加的方法将添加的记录提交到数据库中。执行完记录提交到数据库中。执行完update语句,数据表语句,数据表就多了一条记录。就多了一条记录。此外,上述代码出现的此外,上述代码出现的SqlCommandBuilder对象用对象用来对数据表进行操作。用了这个对象,就不必再繁来对数据表进行操作。用了
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 上海2025上海京剧院公开招聘笔试历年参考题库附带答案详解
- 成都航空职业技术学院《电机容量选择》2023-2024学年第二学期期末试卷
- 集美大学《心血管与呼吸系统Ⅱ》2023-2024学年第二学期期末试卷
- 上海立信会计金融学院《飞行器制造工艺与装备》2023-2024学年第二学期期末试卷
- 泰山护理职业学院《舆情监控与危机管理》2023-2024学年第二学期期末试卷
- 长春医学高等专科学校《材料概论》2023-2024学年第二学期期末试卷
- 广东水利电力职业技术学院《计算机通信与网络》2023-2024学年第二学期期末试卷
- 湘潭医卫职业技术学院《可信计算实验》2023-2024学年第二学期期末试卷
- 北京工业职业技术学院《教育统计学理论教学》2023-2024学年第二学期期末试卷
- 新疆科技职业技术学院《管理专业英语2》2023-2024学年第二学期期末试卷
- 2025年入团考试一览无遗试题及答案
- 铁路段扩能改造站房及生产生活房屋工程方案投标文件(技术方案)
- 2025四年级美术国测知识竞赛题库(104题附答案)
- 2025年《养老护理员》考试模拟练习题及答案
- 公司档案及文件管理制度
- 2025年四川筠连县国有资本投资运营有限公司招聘笔试参考题库含答案解析
- 2024年贵州遵义公开招聘社区工作者考试试题答案解析
- 2025年全国低压电工证(复审)考试笔试试题(300题)含答案
- 2025至2030中国注射用重组人脑利钠肽行业运行态势及未来趋势研究报告
- 文言常识测试题及答案
- 入团考试测试题及答案
评论
0/150
提交评论