版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、 常用格式:常用格式:Select * from 表名表名 Where 条件条件模糊查询:模糊查询:Select * from 表名表名 Where 字段名字段名 like %条件条件%ConnectionConnection对象对象CommandCommand对象对象DataReaderDataReader对象对象DataAdapterDataAdapter对象对象DataSetDataSet对象对象 数据集数据集数据提供器数据提供器准确地说,准确地说,ADO.NET是由很多类组成的一个类库。是由很多类组成的一个类库。这些类提供了众多对象,分别用来完成和数据库的这些类提供了众多对象,分别用来
2、完成和数据库的连接、查询、插入、更新和删除等操作。其中主要连接、查询、插入、更新和删除等操作。其中主要包括包括5个对象。个对象。82022-2-24n Connection对象:用来连接到数据库。对象:用来连接到数据库。n Command对象:用来对数据库执行对象:用来对数据库执行 SQL命令。命令。n DataReader对象:用来从数据库返回只读数据。对象:用来从数据库返回只读数据。n DataAdapter对象:用来从数据库返回数据,并送对象:用来从数据库返回数据,并送到到 Dataset对象中,还要负责保证对象中,还要负责保证Dataset对象中的对象中的数据和数据库中的数据保持一致。
3、数据和数据库中的数据保持一致。n DataSet对象:它可以看做是内存中的数据库。利用对象:它可以看做是内存中的数据库。利用 DataAdapter对象将数据库中的数据送到该对象中,对象将数据库中的数据送到该对象中,然后就可以在其中对数据进行各种操作,最后再利然后就可以在其中对数据进行各种操作,最后再利用用DataAdapter对象将更新反映到数据库中。对象将更新反映到数据库中。92022-2-24这这5个对象提供了两种读取数据库的方式。一种是个对象提供了两种读取数据库的方式。一种是利用利用Connetction、Command和和 DataReader对象,对象,这种方式这种方式只能读取数据
4、库只能读取数据库,也就是说不能修改记录。,也就是说不能修改记录。如果只是想查询记录的话,这种方式的效率更高些。如果只是想查询记录的话,这种方式的效率更高些。 (保持连接模式)(保持连接模式)第二种是利用第二种是利用Connection、Command、DataAdapter和和Dataset对象,这种方式更灵活,可对象,这种方式更灵活,可以对数据库进行各种操作。以对数据库进行各种操作。 (断开连接模式)(断开连接模式)102022-2-24112022-2-24针对不同的数据库,针对不同的数据库,ADO.NET提供了两套类库:提供了两套类库:第一套类库可以存取所有基于第一套类库可以存取所有基于
5、 OLEDB提供的提供的数据库,如数据库,如 SQL Server、Access、Oracle等;等;第二套类库专门用来存取第二套类库专门用来存取 SQL Server数据库。数据库。只对只对SQL Server7.0及更及更高版高版SQL Server数据库数据库进行高度优化连接进行高度优化连接122022-2-24对应命名空间对应命名空间System.Data.OleDbSystem.Data.SqlClient对象对象OLEDBOLEDB数据库数据库SQL ServerSQL Server数据库数据库ConnectionOLEDBConnectionOLEDBConnectionSQLC
6、onnectionSQLConnectionCommandOLEDBCommandOLEDBCommandSQLCommandSQLCommandDataReaderOLEDBDataReaderOLEDBDataReaderSQLDataReaderSQLDataReaderDataAdapterOLEDBDataAdapterOLEDBDataAdapterSQLDataAdapterSQLDataAdapterDataSetDataSetDataSetSQLDataSetSQLDataSet132022-2-24 如果要使用基于如果要使用基于 OLEDB的数据库,需要在页面中的数据库,需
7、要在页面中导入相关的导入相关的,语法如下:,语法如下: using System.Data; using System.Data.Oledb;l如果要使用如果要使用 SQL Server数据库,则语句需要改为数据库,则语句需要改为: using System.Data; using System.Data.SqlClient;142022-2-24Connection对象提供与数据源的连接。要存取数据源对象提供与数据源的连接。要存取数据源内的数据,首先要建立程序和数据源之间的连接。内的数据,首先要建立程序和数据源之间的连接。(1)ConnectionString:获取或设置用于打开数据库:获取
8、或设置用于打开数据库的字符串,包括的字符串,包括(2)State:获取连接的当前状态获取连接的当前状态(1)Open()方法:用于打开由()方法:用于打开由ConnectionString属性指定的数据源连接属性指定的数据源连接(2)Close()方法:关闭数据源连接()方法:关闭数据源连接创建一个新创建一个新Connection对象对象OleDbConnection conn=new OleDbConnection();SqlConnection conn=new SqlConnection();设置设置Connection对象的连接字符串属性对象的连接字符串属性打开或关闭数据库连接打开或关
9、闭数据库连接用于连接用于连接Access数据数据库的对象库的对象用于连接用于连接SQL数据库数据库的对象的对象 为了连接到数据源,需要一个连接字符串。连接为了连接到数据源,需要一个连接字符串。连接字符串通常由字符串通常由分号分号隔开的名称和值组成隔开的名称和值组成,它指定数,它指定数据库运行库的设置。连接字符串中包含的典型信息据库运行库的设置。连接字符串中包含的典型信息包括包括数据库的名称、服务器的位置和用户的身份。数据库的名称、服务器的位置和用户的身份。下面以连接下面以连接AccessAccess数据库和数据库和SQL ServerSQL Server数据库为数据库为例说明。例说明。程序员可
10、以方便地程序员可以方便地更改服务器名称、更改服务器名称、数据库或身份验证数据库或身份验证信息,而无须逐个信息,而无须逐个修改程序。修改程序。172022-2-24OleDbConnection类的类的Connectionstrings属性所要求的属性所要求的字符串的内容也是由若干个字符串的内容也是由若干个以分号隔开以分号隔开的的 “参数名参数名参数值参数值”表示的子串组成。如:表示的子串组成。如: conn.ConnectionString = Provider=Microsoft.Jet.Oledb.4.0; + Data Source= + Server.MapPath(App_Data/
11、xxx.mdb);以上字符串说明了连接以上字符串说明了连接 Access数据库的方法。数据库的方法。Conn.ConectionString Conn.ConectionString =Data Source=.SQLEXPRESS; =Data Source=.SQLEXPRESS; AttachDbFilename=|DataDirectory|AttachDbFilename=|DataDirectory|* *.mdf;.mdf; Integrated Security=True; Integrated Security=True; User Instance=True User In
12、stance=True 192022-2-24连接连接SQL Server数据库的机制与连接数据库的机制与连接Access的机制的机制没有什么太大的区别没有什么太大的区别,只是改变了只是改变了Connection对象和对象和连接字符串中的不同参数。连接字符串中的不同参数。首先首先,连接连接SQL Server使用的命名空间不是使用的命名空间不是“System.Data.OleDb”,而是而是“System.Data.SqlClient”。202022-2-24server=.SQLEXPRESS,表示使用的是本地表示使用的是本地数据数据库库且定义了实例名;如果是远程且定义了实例名;如果是远程服
13、务器服务器,则将则将“.”替替换为远程换为远程服务器服务器的名称或的名称或IP地址。地址。conn.ConnectionString = “server=xx;database=数据数据库名库名;uid=sa;pwd=密码密码; 注意:在连接注意:在连接SQL Server 2005时,时,server参数写为:参数写为:server= .SQLEXPRESS;连接字符串指明要连接哪台服务器上的、哪个实连接字符串指明要连接哪台服务器上的、哪个实例的哪个数据库,所用用户名及密码等信息。例的哪个数据库,所用用户名及密码等信息。 下面以查询下面以查询student表数据为例介绍如何打开和关闭数据库。
14、表数据为例介绍如何打开和关闭数据库。代码如下。代码如下。 protected void Page_Load(object sender, EventArgs e)/数据库名为数据库名为stu,用户名为用户名为sa,用户密码为空用户密码为空SqlConnection conn = new SqlConnection(); String strCon = server=.;database=stu;uid=sa;pwd=;conn.Connectionstring=strCon; conn.Open();/打开数据库连接打开数据库连接SqlCommand cmd = new SqlCommand(
15、select * from student, conn);/查询学生信息表查询学生信息表conn.Close();/关闭数据库连接关闭数据库连接 上述是典型的数据库连接代码,常在上述是典型的数据库连接代码,常在Web.Config文件中存文件中存放数据库的连接信息。放数据库的连接信息。 将数据库连接字符串存放在应用程序的配置文件将数据库连接字符串存放在应用程序的配置文件(即(即Web.Config)中,代码如下。)中,代码如下。 在程序中获得在程序中获得连接字符串的方法如下:连接字符串的方法如下: conn.ConnectionString =System.Configuration.Conf
16、igurationManager. ConnectionStringsconstr2.ToString();连接字连接字符串名符串名ASP.NET 应用程序将应用程序将 |DataDirectory| 解析为解析为“/app_data”文件夹。文件夹。 在创建数据库连接时,建议使用在创建数据库连接时,建议使用Using语句块语句块;其作用为其作用为:定义一个:定义一个范围范围,在范围结束时处理对象,在范围结束时处理对象(当离开包含的代码段时自动调用该类实例的(当离开包含的代码段时自动调用该类实例的Dispose()方法,自动关闭数据库连接且释放连()方法,自动关闭数据库连接且释放连接所使用的资
17、源);接所使用的资源); 如果需要使用一个对象,这个对象需要占用很多如果需要使用一个对象,这个对象需要占用很多紧缺的资源,使用完成后需要马上释放掉的话,建紧缺的资源,使用完成后需要马上释放掉的话,建议使用议使用using语句;语句; 优势优势:可以避免资源释放不及时导致的冲突或性:可以避免资源释放不及时导致的冲突或性能问题。能问题。 using (SqlConnection conn=new SqlConnection() )using (SqlConnection conn=new SqlConnection() ) conn.ConnectionString=“” conn.Connect
18、ionString=“”; conn.Open(); conn.Open(); 252022-2-24Command对象最主要的工作是通过对象最主要的工作是通过Connection对象对象对数据源下达对数据源下达操作数据库操作数据库的命令。使用户能够访问的命令。使用户能够访问用于返回数据、修改数据运行存储过程以及发送或用于返回数据、修改数据运行存储过程以及发送或检索参数信息的数据库命令。检索参数信息的数据库命令。 下列语法产生下列语法产生 Command对象:对象:SqlCommand com = new SqlCommand(string ,conn); );要执行的要执行的SQLSQL语句
19、语句已建立的已建立的Connection对象对象272022-2-24ExecuteNonQuery:执行不返回任何行的命令。:执行不返回任何行的命令。典型的例子是实现典型的例子是实现插入、更新和删除插入、更新和删除。 ExecuteReader:通过:通过Connection对象下达命令至对象下达命令至数据源,将数据作为一个数据源,将数据作为一个 DataReader 对象返回。对象返回。用于任何返回数据的用于任何返回数据的 SQL 查询;查询; ExecuteScalar:从数据库中返回单独值,例如与:从数据库中返回单独值,例如与特定查询相匹配的记录数,或者数据库功能调用特定查询相匹配的记
20、录数,或者数据库功能调用的结果。的结果。 ExecuteNonQuery方法执行更新操作,诸如那些与方法执行更新操作,诸如那些与UPDATE、INSERT和和DELETE语句有关的操作,语句有关的操作,该方法返回一个整型(该方法返回一个整型(Integer)数据,返回值是命)数据,返回值是命令影响的行数。令影响的行数。例如,创建一个例如,创建一个SqlCommand,然后使用,然后使用ExecuteNonQuery方法执行方法执行SQL语句,如:语句,如:UPDATE、INSERT或或DELETE。【例【例1】 使用使用ExecuteNonQuery方法向数据库中插方法向数据库中插入记录。入记
21、录。 ExecuteReader方法通常与查询命令一起使用,并方法通常与查询命令一起使用,并且返回一个数据阅读器对象且返回一个数据阅读器对象DataReader,该对象连,该对象连接到数据库的结果集上,并允许行检索。接到数据库的结果集上,并允许行检索。数据阅读器是一种只读的、向前移动的游标,客户数据阅读器是一种只读的、向前移动的游标,客户端代码滚动游标并从中读取数据。如果通过端代码滚动游标并从中读取数据。如果通过ExecuteReader方法执行一个更新语句方法执行一个更新语句,则该命令,则该命令成功地执行,但是不会返回任何受影响的数据行。成功地执行,但是不会返回任何受影响的数据行。 SqlC
22、ommand com = new SqlCommand(queryString, connection);/通过通过ExecuteReader方法创建方法创建DataReader对象对象SqlDataReader dr = com.ExecuteReader();if (dr.Read() / else / 使用使用DataReader对象中的对象中的Read方法用来遍历整个结果集,不需方法用来遍历整个结果集,不需要显式地向前移动指针,或者检要显式地向前移动指针,或者检查文件的结束,如果没有要读取查文件的结束,如果没有要读取的记录了,则的记录了,则Read方法会自动返方法会自动返回回False
23、。【例【例2】 使用使用ExecuteReader方法将性别为方法将性别为“女女”性性的记录显示在的记录显示在GridView控件中。控件中。执行查询,并返回结果集中执行查询,并返回结果集中第一行的第一列的值。第一行的第一列的值。如果只想检索数据库信息中的一个值,而不需要返如果只想检索数据库信息中的一个值,而不需要返回表或数据流形式的数据库信息。回表或数据流形式的数据库信息。例如,只需要返例如,只需要返回回 COUNT(*)、SUM( ) 或或 AVG( ) 等函数的结果等函数的结果,那么那么Command对象的对象的ExecuteScalar方法就很有用。方法就很有用。如果在一个常规查询语句
24、当中调用该方法,则只读如果在一个常规查询语句当中调用该方法,则只读取第一行第一列的值,而丢弃所有其他值。取第一行第一列的值,而丢弃所有其他值。在数据库在数据库Colledge.mdb中,有一个中,有一个teacher表如下表如下所示:所示:窗体上有一文本框(名称为窗体上有一文本框(名称为TextBox1)TextBox1)和一命令按钮和一命令按钮( (名称名称为为Button1)Button1),有如下代码:,有如下代码: OleDbConnection conn = new OleDbConnection();OleDbConnection conn = new OleDbConnectio
25、n(); conn.ConnectionString = conn.ConnectionString = Provider=Microsoft.Jet.Oledb.4.0; + Data Source= Provider=Microsoft.Jet.Oledb.4.0; + Data Source= + Server.MapPath(App_Data/Colledge.mdb);+ Server.MapPath(App_Data/Colledge.mdb); conn.Open(); conn.Open(); string sql = select count( string sql = se
26、lect count(* *) from teacher where ) from teacher where 年年龄龄35;35;/string sql = select /string sql = select * * from teacher where from teacher where 年龄年龄35; 35; /常规查询,返回结果集中第常规查询,返回结果集中第1 1行第行第1 1列的值列的值 OleDbCommand com = new OleDbCommand(sql, conn); OleDbCommand com = new OleDbCommand(sql, conn);
27、TextBox1.Text = com.ExecuteScalar().ToString(); TextBox1.Text = com.ExecuteScalar().ToString(); conn.Close();conn.Close();程序执行后,文本框显示的内容?程序执行后,文本框显示的内容?当当Command 对象返回结果集时,需要使用对象返回结果集时,需要使用DataReader对象来检索数据。对象来检索数据。DataReader 对象返对象返回一个来自回一个来自Command 的只读的、只能向前的数据的只读的、只能向前的数据流。流。DataReader每次只能在内存中保留一行,
28、所以每次只能在内存中保留一行,所以开销非常小。开销非常小。在与数据库的交互中,要获得数据访问的结果可在与数据库的交互中,要获得数据访问的结果可用两种方法来实现,第一种是通过用两种方法来实现,第一种是通过DataReader对对象从数据源中获取数据并进行处理;第二种是通象从数据源中获取数据并进行处理;第二种是通过过DataSet对象将数据放置在内存中进行处理。对象将数据放置在内存中进行处理。DataReader对象常用方法对象常用方法注意:注意:DataReader对象不能用对象不能用new运算符生成,运算符生成,只能使用只能使用Command对象的对象的ExecuteReader()方法方法来
29、创建。来创建。SqlCommand cmd= new SqlCommand( SELECT *FROM Customers ,conn); /查询查询Customers表表SqlDataReader dr=cmd.ExecuteReader();While(dr.Read() /循环读取数据循环读取数据 dr.Close(); /关闭关闭DataReader对象对象在数据库在数据库Colledge.mdb中,有一个中,有一个teacher表,如表所示。表,如表所示。在窗体上有一个按钮(其在窗体上有一个按钮(其ID为为Button1)和一个列表框(其)和一个列表框(其ID为为ListBox1)。
30、程序运行后,单击命令按钮,列表框中)。程序运行后,单击命令按钮,列表框中的内容是什么?的内容是什么? OleDbConnection conn = new OleDbConnection(); conn.ConnectionString =Provider=Microsoft.Jet.Oledb.4.0; + Data Source= + Server.MapPath(App_Data/Colledge.mdb); conn.Open(); string strsql = select * from teacher where 姓名姓名 like %王王%; OleDbCommand com
31、= new OleDbCommand(strsql, conn); OleDbDataReader dr = com.ExecuteReader(); while (dr.Read() ListBox1 .Items .Add (dr姓名姓名.ToString(); conn.Close();获取查询结果获取查询结果中的中的”姓名姓名”字段值字段值上例中,用户登录时输入任意用户名,密码为:上例中,用户登录时输入任意用户名,密码为: 1 or 1=1则能够成功登录则能够成功登录分析:分析:形成的查询语句为:形成的查询语句为:select * from T_users where uname=dd
32、 and password=1 or 1=1 可见执行可见执行com.ExecuteReader()方法时会返回所有记录方法时会返回所有记录 当应用程序使用输入内容来构造动态当应用程序使用输入内容来构造动态sql语句以访语句以访问数据库时,会发生问数据库时,会发生sql注入攻击注入攻击 。使用二种方法均可参数化查询是指在与参数化查询是指在与数据库数据库连接并访问数据时,在连接并访问数据时,在需要填入数据的地方,使用参数需要填入数据的地方,使用参数 (Parameter) 来给来给值,该方法可以有效预防值,该方法可以有效预防SQL注入攻击注入攻击 。原理:在使用参数化查询的情况下,原理:在使用参
33、数化查询的情况下,数据库数据库服务器服务器不会将参数的内容视为不会将参数的内容视为SQL指令的一部份来处理,指令的一部份来处理,而是在数据库完成而是在数据库完成 SQL 指令的编译后,才套用参指令的编译后,才套用参数运行,因此即使参数中含有恶意的指令,由于已数运行,因此即使参数中含有恶意的指令,由于已经编译完成,就不会被数据库所运行。经编译完成,就不会被数据库所运行。Microsoft SQL Server 的参数格式是以的参数格式是以 “” 字符字符加上参数名称而构成。加上参数名称而构成。 SELECT SELECT * * FROM myTable WHERE myID = myID FR
34、OM 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 的值。的值。 作用:使用作用:使用conn建立的数据连接
35、,执行建立的数据连接,执行StrSel表示的表示的SQL语句。语句。例如:例如:string strsql = “select * from 表表 ;SqlCommand com=new SqlCommand (strsql ,conn); SqlDataAdapter da = new SqlDataAdapter();da.SelectCommand = com; Fill Fill 方法使用方法使用 SELECT SELECT 语句从数据源中检索数语句从数据源中检索数据。与据。与 Select Select 命令关联的命令关联的 Connection Connection 对象必须有对象
36、必须有效,效,但不需要将其打开但不需要将其打开。如果。如果 Fill Fill 方法发现连方法发现连接尚未打开,它将隐式地打开接尚未打开,它将隐式地打开 DataAdapter DataAdapter 正正在使用的在使用的 Connection Connection,然后再将其关闭。如果调,然后再将其关闭。如果调用用 Fill Fill 之前连接已打开,它将保持打开状态。之前连接已打开,它将保持打开状态。1.创建数据库连接对象创建数据库连接对象Connection;2.创建创建Select查询语句或查询语句或Command对象;对象;3.创建创建DataAdapter对象;对象;4.创建创建D
37、ataSet对象;对象;5.为为DataAdapter对象自动生成更新命令;对象自动生成更新命令;6.调用调用DataAdapter对象的对象的Fill()方法填充方法填充DataSet对象;对象;7.对对DataTable中的特定记录进行增加、删除、修改中的特定记录进行增加、删除、修改8. 调用调用DataAdapter对象的对象的Update()方法,将()方法,将DataTable中中的数据变化提交到数据库。的数据变化提交到数据库。说明:说明:当调用当调用Update方法时,方法时,DataAdapter将分析已做出的更将分析已做出的更改并执行相应的命令(改并执行相应的命令(Insert
38、,Update,Delete)。)。 OleDbConnection conn = new OleDbConnection(); conn.ConnectionString = Provider=Microsoft.Jet.OleDb.4.0; + Data Source= +Server.MapPath(App_Data/Student.mdb); string SqlStr=select * from grade; OleDbCommand com = new OleDbCommand(SqlStr, conn); OleDbDataAdapter da = new OleDbDataAd
39、apter(); da.SelectCommand = com; DataTable dt = new DataTable(); OleDbCommandBuilder builder = new OleDbCommandBuilder(da); da.Fill(dt); DataRow myrow = dt.Rows0; myrow1 = 王丽王丽; myrow2 = 男男; myrow6 = 88; da.Update(dt);FDataAdapter对象对象.Update(数据集对象数据集对象,数据表名数据表名);FSqlCommandBuilder 对象名对象名=new SqlComm
40、andBuilder(已创建的已创建的DataAdapter对象对象);DataSet相当于内存中的数据库,在命名空间相当于内存中的数据库,在命名空间System.Data中定义;中定义;DataAdapter相当于相当于DataSet和物理数据源之间的桥梁。和物理数据源之间的桥梁。在在DataSet内部是一个或多个内部是一个或多个DataTable的集合,的集合, DataSet.Tables“表名表名”可获取数据集中的一个表。可获取数据集中的一个表。 在在DataTable 中执行的插入、更新和删除操作中执行的插入、更新和删除操作并不并不会自动写回数据库会自动写回数据库。如果想把更改写回数
41、据库,则。如果想把更改写回数据库,则需要手动去完成,这个操作由需要手动去完成,这个操作由DataAdapter.UpdateDataAdapter.Update完成。完成。 断开式断开式ADO.NET数据库访问示例图数据库访问示例图提示提示: DataSet中的各种集合,访问子项有两种方法中的各种集合,访问子项有两种方法,一种是用子项的名,一种是用数字索引。如要访问一种是用子项的名,一种是用数字索引。如要访问表表”student”,可以用,可以用: DataSet.Tables“student”或或DataSet.Tables0 访问访问 (多张表依次类推多张表依次类推) 填充数据。第二个参数
42、是数据集填充数据。第二个参数是数据集中内存表的名字,可以与数据库中内存表的名字,可以与数据库中的表名不同。中的表名不同。 protected void Button1_Click(object sender, EventArgs e) OleDbConnection conn = new OleDbConnection(); conn.ConnectionString = Provider=Microsoft.Jet.Oledb.4.0; + Data Source= + Server.MapPath(App_Data/Colledge.mdb); conn.Open(); string st
43、rsql = select * from teacher where 姓名姓名 like %王王%; OleDbCommand com=new OleDbCommand (strsql ,conn); OleDbDataAdapter da = new OleDbDataAdapter(); da.SelectCommand = com; DataSet ds = new DataSet(); da.Fill(ds); GridView1.DataSource = ds; GridView1 .DataBind (); DataAdapterDataAdapter填填充数据到数据集充数据到数据
44、集(DataSetDataSet)中)中填充数据,填充数据,Fill方法其实是隐方法其实是隐藏的执行了命令对象藏的执行了命令对象(Command)的查询语句)的查询语句protected void Button1_Click(object sender, EventArgs e)protected void Button1_Click(object sender, EventArgs e) SqlConnection conn = new SqlConnection(); SqlConnection conn = new SqlConnection(); conn.ConnectionStri
45、ng = conn.ConnectionString = ConfigurationManager.ConnectionStringsconstr.ToStrinConfigurationManager.ConnectionStringsconstr.ToString(); g(); string strsql = select string strsql = select * * from T_student; from T_student; SqlDataAdapter da = new SqlDataAdapter(strsql,conn); SqlDataAdapter da = ne
46、w SqlDataAdapter(strsql,conn); DataSet ds = new DataSet(); DataSet ds = new DataSet(); da.Fill(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
47、DataSet 的结构和数据库相似,插入数据实质上就是的结构和数据库相似,插入数据实质上就是在在DataSet DataSet 的数据表里插入一行的数据表里插入一行(DataRow)(DataRow)/新建一行新建一行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
48、;ds.Tables“users”.Rows.Add(dr); /ds.Tables“users”.Rows.Add(dr); /将新建的将新建的行加到行加到DataTable DataTable 的的DataRowDataRow集合中集合中注意:注意:对对DataSetDataSet的操作仅仅是在的操作仅仅是在DataSetDataSet中执行中执行, ,并并不影响数据库中的数据。不影响数据库中的数据。使用使用DataAdapter DataAdapter 的的 UpdateUpdate()方法可以将()方法可以将数据集中的结果更新回数据源。数据集中的结果更新回数据源。注意注意: DataA
49、dapter : DataAdapter 对象在数据发生改变时对象在数据发生改变时, ,并并不能自动产生数据库系统所需的交易不能自动产生数据库系统所需的交易sqlsql语句语句, ,所所有要建立一个有要建立一个CommandBuilder CommandBuilder 对象,它能自动对象,它能自动产生交易的产生交易的sqlsql语句。语句。OleDbCommandBuilder custcb = new OleDbCommandBuilder custcb = new OleDbCommandBuilder(MyAdapter);OleDbCommandBuilder(MyAdapter);
50、protected void BunDel_Click(object sender, EventArgs e)protected void BunDel_Click(object sender, EventArgs e) SqlConnection conn = new SqlConnection();SqlConnection conn = new SqlConnection();conn.ConnectionString = conn.ConnectionString = ConfigurationManager.ConnectionStringsconstr.ToStrConfigura
51、tionManager.ConnectionStringsconstr.ToString();ing();SqlDataAdapter da = new SqlDataAdapter(select SqlDataAdapter da = new SqlDataAdapter(select * * from from T_student, conn);T_student, conn); DataSet ds = new DataSet();/ DataSet ds = new DataSet();/建立建立DataSetDataSet实例实例 /使用使用DataAdapterDataAdapte
52、r填充数据集填充数据集DataSetDataSet da.Fill(ds, student); da.Fill(ds, student); DataRow dr = ds.Tablesstudent.Rows2;DataRow dr = ds.Tablesstudent.Rows2; dr.Delete(); dr.Delete(); SqlCommandBuilder cb = new SqlCommandBuilder(da); SqlCommandBuilder cb = new SqlCommandBuilder(da); da.Update(ds, student); da.Upda
53、te(ds, student); 删除记录删除记录protected void Button4_Click(object sender, EventArgs e)protected void Button4_Click(object sender, EventArgs e) SqlConnection conn = new SqlConnection(); SqlConnection conn = new SqlConnection(); conn.ConnectionString = conn.ConnectionString = ConfigurationManager.Connectio
54、nStringsconstr.ToStConfigurationManager.ConnectionStringsconstr.ToString();ring(); SqlDataAdapter da = new SqlDataAdapter(select SqlDataAdapter da = new SqlDataAdapter(select * * from from T_Student, conn);T_Student, conn); DataSet ds = new DataSet();/ DataSet ds = new DataSet();/建立建立DataSetDataSet实
55、例实例 /使用使用DataAdapterDataAdapter填充数据集填充数据集DataSetDataSet da.Fill(ds, student); da.Fill(ds, student); DataRow dr = ds.Tablesstudent.Rows0; DataRow dr = ds.Tablesstudent.Rows0; drsclass = drsclass = 网络技术网络技术Z101;Z101; drmath = 99; drmath = 99; SqlCommandBuilder cb = new SqlCommandBuilder(da); SqlComman
56、dBuilder cb = new SqlCommandBuilder(da); da.Update(ds, student); da.Update(ds, student); 修改记录修改记录当在代码里使用当在代码里使用DataAdapter对象获得数据表的连对象获得数据表的连接数据时,如果表中数据有主键,就可以使用接数据时,如果表中数据有主键,就可以使用CommandBuilder对象来自动为这个对象来自动为这个DataAdapter对象对象隐形隐形地生成其他地生成其他3个个InsertCommand、DeleteCommand和和UpdateCommand 属性。这样,属性。这样,在修改
57、数据后,就可以在修改数据后,就可以直接调用直接调用Update方法将修改方法将修改后的数据更新到数据库中,而不必再使用后的数据更新到数据库中,而不必再使用InsertCommand、DeleteCommand和和UpdateCommand这这3个属性来执行更新操作。个属性来执行更新操作。 OleDbConnection conn = new OleDbConnection(); conn.ConnectionString = Provider=Microsoft.Jet.Oledb.4.0; + Data Source= + Server.MapPath(App_Data/Colledge.m
58、db); conn.Open(); string strsql = select * from teacher; OleDbCommand com = new OleDbCommand(strsql, conn); OleDbDataAdapter da = new OleDbDataAdapter(); DataSet ds = new DataSet(); da.SelectCommand = com; /与与sql命令对象绑定命令对象绑定 da.Fill(ds, teacher); DataRow newRow = ds.Tablesteacher.NewRow();/向向teacher
59、表中插入一行表中插入一行 newRow编号编号 = TextBox1 .Text ; /该行的一列的值该行的一列的值 newRow姓名姓名 = TextBox2.Text ; /该行另外一列的值该行另外一列的值 newRow年龄年龄 = int.Parse (TextBox3 .Text ); newRow = TextBox4 .Text ; newRow职称职称 = TextBox5.Text; ds.Tablesteacher.Rows.Add(newRow); OleDbCommandBuilder commandBuilder = new OleDbCommandBuilder(da
60、); da.Update(ds, teacher); /用用DataAdapter的的Update方法将数据集写回数据源方法将数据集写回数据源 GridView1.DataSource = ds; /将数据集绑定到数据显示控件将数据集绑定到数据显示控件 GridView1.DataBind();使使用用 更更新新数数据据源源Update填充数据。第二个参数是数据填充数据。第二个参数是数据集中内存表的名字,可以与数集中内存表的名字,可以与数据库中的不同,据库中的不同,Fill方法其实是方法其实是隐藏的执行了命令对象隐藏的执行了命令对象(Command)的查询语句)的查询语句代码要点:代码要点:在
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 银行工作总结精准营销客户频频
- 激励员工的创新方式计划
- 电子商务行业管理顾问工作总结
- 《浅水湾拉斯维加斯》课件
- 2022年湖南省永州市公开招聘警务辅助人员辅警笔试自考题1卷含答案
- 2024年江苏省淮安市公开招聘警务辅助人员辅警笔试自考题1卷含答案
- 2024年内蒙古自治区巴彦淖尔市公开招聘警务辅助人员辅警笔试自考题2卷含答案
- 2021年浙江省温州市公开招聘警务辅助人员辅警笔试自考题1卷含答案
- 江苏省无锡市(2024年-2025年小学六年级语文)统编版质量测试((上下)学期)试卷及答案
- 2025年燃气掺混设备项目提案报告模式
- 通力电梯KCE电气系统学习指南
- 风电场岗位任职资格考试题库大全-下(填空题2-2)
- 九年级数学特长生选拔考试试题
- 幼儿园交通安全宣传课件PPT
- 门窗施工组织设计与方案
- 健身健美(课堂PPT)
- (完整版)财务管理学课后习题答案-人大版
- 锚索试验总结(共11页)
- 移动脚手架安全交底
- 人教版“课标”教材《统计与概率》教学内容、具体目标和要求
- 矩形钢板水箱的设计与计算
评论
0/150
提交评论