第9章ASPNET操作数据库_第1页
第9章ASPNET操作数据库_第2页
第9章ASPNET操作数据库_第3页
第9章ASPNET操作数据库_第4页
第9章ASPNET操作数据库_第5页
已阅读5页,还剩30页未读 继续免费阅读

下载本文档

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

文档简介

1、第9章ASPNET操作数据库 第9章ASPNET操作数据库2 第第 7 7 章章 数据库与数据库与 ADO.NET ADO.NET 基础基础 第第 8 8 章章 Web Web 窗体的数据控件窗体的数据控件 第第 9 9 章章 ASP.NET ASP.NET 操作数据库操作数据库 第第 10 10 章章 访问其他数据源访问其他数据源 第9章ASPNET操作数据库3 主讲:主讲:Jayce_ZouJayce_Zou 第9章ASPNET操作数据库4 使用使用 ADO.NET ADO.NET 操作数据库操作数据库 ASP.NET ASP.NET 创建和插入记录创建和插入记录 ASP.NET ASP.

2、NET 更新数据库更新数据库 ASP.NET ASP.NET 删除数据删除数据 使用存储过程使用存储过程 第9章ASPNET操作数据库5 在在 ADO.NET ADO.NET 中,执行中,执行SQLSQL语句有很多方法,其中推荐使用语句有很多方法,其中推荐使用 Command Command 命令的命令的 ExecuteNonQuery()ExecuteNonQuery()。执行。执行 SQL SQL 语句的命令的必要步骤如下语句的命令的必要步骤如下 所示:所示: 打开数据连接。打开数据连接。 创建一个新的创建一个新的 Command Command 对象。对象。 定义一个定义一个 SQL S

3、QL 命令。命令。 执行执行 SQL SQL 命令。命令。 关闭连接。关闭连接。 第9章ASPNET操作数据库6 示例代码如下所示:示例代码如下所示: string str = string str = server=(local);database=mytable;uid=sa;pwd=sa;server=(local);database=mytable;uid=sa;pwd=sa; SqlConnection con = new SqlConnection(str); SqlConnection con = new SqlConnection(str); con.Open(); con.O

4、pen(); SqlCommand cmd = new SqlCommand(insert into mynews value SqlCommand cmd = new SqlCommand(insert into mynews value (插入一条新数据插入一条新数据), con);), con); cmd.ExecuteNonQuery(); cmd.ExecuteNonQuery(); con.Close(); con.Close(); 第9章ASPNET操作数据库7 使用使用 INSERT INSERT 语句能够完成数据插入,使用语句能够完成数据插入,使用 DataSet DataS

5、et 对象也可以完对象也可以完 成数据插入。使用成数据插入。使用 DataSet DataSet 更新记录的步骤如下所示:更新记录的步骤如下所示: 创建一个创建一个 Connection Connection 对象。对象。 创建一个创建一个 DataAdapter DataAdapter 对象。对象。 使用使用 DataAdapter DataAdapter 的的 Fill Fill 方法执行方法执行 SELECT SELECT 命令,并填充命令,并填充 DataSetDataSet。 使用使用 DataTable DataTable 对象提供的对象提供的 NewRow NewRow 方法创建

6、新行。方法创建新行。 将数据行的字段设置为插入的值。将数据行的字段设置为插入的值。 使用使用 DataRowAdd DataRowAdd 类的类的 Add Add 方法将数据行添加到数据表中。方法将数据行添加到数据表中。 把把 DataAdapter DataAdapter 类的类的 InsertCommand InsertCommand 属性设置成需要插入记录的属性设置成需要插入记录的 INSERT INSERT 语句。语句。 使用数据适配器提供的使用数据适配器提供的 Update Update 方法将新记录插入数据库。方法将新记录插入数据库。 使用使用 DataSet DataSet 类提

7、供的类提供的 AcceptChanges AcceptChanges 方法将数据库与内存中的方法将数据库与内存中的 数据保持一致。数据保持一致。 第9章ASPNET操作数据库8 string str = string str = server=(local);database=mytable;uid=sa;pwd=sa;server=(local);database=mytable;uid=sa;pwd=sa; SqlConnection con = new SqlConnection(str); SqlConnection con = new SqlConnection(str); con.

8、Open(); con.Open(); string strsql = select string strsql = select * * from mynews; from mynews; SqlDataAdapter da = new SqlDataAdapter(strsql, con); SqlDataAdapter da = new SqlDataAdapter(strsql, con); SqlCommandBuilder build = new SqlCommandBuilder(da); SqlCommandBuilder build = new SqlCommandBuild

9、er(da); DataSet ds = new DataSet(); DataSet ds = new DataSet(); /创建数据集创建数据集 da.Fill(ds, “datatable”); da.Fill(ds, “datatable”); /填充数据集填充数据集 DataTable tb = ds.Tables“datatable”; DataTable tb = ds.Tables“datatable”; /创建表创建表 tb.PrimaryKey = new DataColumntb.Columns“id”;/tb.PrimaryKey = new DataColumntb

10、.Columns“id”;/创建表的主键创建表的主键 DataRow row = ds.Tablesdatatable.NewRow(); DataRow row = ds.Tablesdatatable.NewRow(); rowtitle = rowtitle = 使用使用 DataSet DataSet 插入新行插入新行; ; /赋值新列赋值新列 rowid = 15;rowid = 15; ds.Tables“datatable”.Rows.Add(row);ds.Tables“datatable”.Rows.Add(row);/添加新行添加新行 da.Update(ds, datat

11、able); da.Update(ds, datatable); /更新数据更新数据 第9章ASPNET操作数据库9 如需要执行如需要执行 UPDATE UPDATE 语句时,同样可以使用语句时,同样可以使用 Command Command 对象执行语句对象执行语句 。Command Command 对象基本上能够执行对象基本上能够执行 所有需要进行数据更新的所有需要进行数据更新的SQLSQL语句。语句。 示例代码如下所示示例代码如下所示: : string str = string str = server=(local);database=mytable;uid=sa;pwd=sa;ser

12、ver=(local);database=mytable;uid=sa;pwd=sa; SqlConnection con = new SqlConnection(str); SqlConnection con = new SqlConnection(str); con.Open(); con.Open(); SqlCommand cmd = new SqlCommand(UPDATE mynews SET SqlCommand cmd = new SqlCommand(UPDATE mynews SET title=title=修改后的数据修改后的数据where id=3“, con); w

13、here id=3“, con); cmd.ExecuteNonQuery(); cmd.ExecuteNonQuery(); con.Close();con.Close(); 第9章ASPNET操作数据库10 DataSet DataSet 更新记录的步骤如下所示:更新记录的步骤如下所示: 创建一个创建一个 Connection Connection 对象。对象。 创建一个创建一个 DataAdapter DataAdapter 对象。对象。 初始化适配器。初始化适配器。 使用数据适配器的使用数据适配器的 Fill Fill 方法执行方法执行 SELECT SELECT 命令,并填充命令,并

14、填充 DataSetDataSet 。 执行执行 SqlCommandBuilder SqlCommandBuilder 方法生成方法生成 UpdataCommand UpdataCommand 方法。方法。 创建创建 DataTable DataTable 对象并指定相应的对象并指定相应的 DataSet DataSet 中的表。中的表。 创建创建 DataRow DataRow 对象并查找需要修改的相应行。对象并查找需要修改的相应行。 更改更改 DataRow DataRow 对象中的列的值。对象中的列的值。 使用使用 Update Update 方法进行数据更新。方法进行数据更新。 第9

15、章ASPNET操作数据库11 string str = string str = “server=(local);database=mytable;uid=sa;pwd=sa”;“server=(local);database=mytable;uid=sa;pwd=sa”; SqlConnection con = new SqlConnection(str); SqlConnection con = new SqlConnection(str); con.Open(); con.Open(); string strsql = select string strsql = select * *

16、from mynews; from mynews; SqlDataAdapter da = new SqlDataAdapter(strsql, con);SqlDataAdapter da = new SqlDataAdapter(strsql, con); SqlCommandBuilder build = new SqlCommandBuilder(da);SqlCommandBuilder build = new SqlCommandBuilder(da); DataSet ds = new DataSet(); DataSet ds = new DataSet(); /使用使用 Da

17、taSetDataSet da.Fill(ds, datatable); da.Fill(ds, datatable); /使用使用 Fill Fill 方法填充方法填充 DataSetDataSet DataTable tb = ds.Tablesdatatable;DataTable tb = ds.Tablesdatatable; tb.PrimaryKey = new DataColumn tb.Columnsid ; tb.PrimaryKey = new DataColumn tb.Columnsid ; DataRow row = tb.Rows.Find(1);DataRow

18、row = tb.Rows.Find(1); rowtitle = rowtitle = 新标题新标题; da.Update(ds, datatable);da.Update(ds, datatable); 第9章ASPNET操作数据库12 当需要执行删除语句,可以使用当需要执行删除语句,可以使用 Command Command 对象来删除数据对象来删除数据 库中的记录。库中的记录。 示例代码如下所示示例代码如下所示: : string str = string str = server=(local);database=mytable;uid=sa;pwd=sa; server=(local

19、);database=mytable;uid=sa;pwd=sa; SqlConnection con = new SqlConnection(str);SqlConnection con = new SqlConnection(str); con.Open(); con.Open(); SqlCommand cmd = new SqlCommand(Delete mynews where id=3, SqlCommand cmd = new SqlCommand(Delete mynews where id=3, con);con); cmd.ExecuteNonQuery(); cmd.E

20、xecuteNonQuery(); con.Close(); con.Close(); 第9章ASPNET操作数据库13 使用使用 DataSet DataSet 删除记录和使用删除记录和使用 DataSet DataSet 更新记录非常的相似,更新记录非常的相似, DataSet DataSet 删除记录的步骤如下所示删除记录的步骤如下所示 : 创建一个创建一个 Connection Connection 对象。对象。 创建一个创建一个 DataAdapter DataAdapter 对象。对象。 初始化适配器。初始化适配器。 使用数据适配器的使用数据适配器的 Fill Fill 方法执行方

21、法执行 SELECT SELECT 命令,并填充命令,并填充 DataSetDataSet 。 执行执行 SqlCommandBuilder SqlCommandBuilder 方法生成方法生成 UpdataCommand UpdataCommand 方法。方法。 创建创建 DataTable DataTable 对象并指定相应的对象并指定相应的 DataSet DataSet 中的表。中的表。 创建创建 DataRow DataRow 对象并查找需要修改的相应行。对象并查找需要修改的相应行。 使用使用 Delete Delete 方法删除该行。方法删除该行。 使用使用 Updata Upda

22、ta 方法进行数据更新。方法进行数据更新。 第9章ASPNET操作数据库14 string str = string str = “server=(local);database=mytable;uid=sa;pwd=sa”;“server=(local);database=mytable;uid=sa;pwd=sa”; SqlConnection con = new SqlConnection(str); SqlConnection con = new SqlConnection(str); con.Open(); con.Open(); string strsql = select str

23、ing strsql = select * * from mynews; from mynews; SqlDataAdapter da = new SqlDataAdapter(strsql, con);SqlDataAdapter da = new SqlDataAdapter(strsql, con); SqlCommandBuilder build = new SqlCommandBuilder(da);SqlCommandBuilder build = new SqlCommandBuilder(da); DataSet ds = new DataSet(); DataSet ds =

24、 new DataSet(); /使用使用 DataSetDataSet da.Fill(ds, datatable); da.Fill(ds, datatable); /使用使用 Fill Fill 方法填充方法填充 DataSetDataSet DataTable tb = ds.Tablesdatatable;DataTable tb = ds.Tablesdatatable; tb.PrimaryKey = new DataColumn tb.Columnsid ; tb.PrimaryKey = new DataColumn tb.Columnsid ; DataRow row =

25、tb.Rows.Find(3);DataRow row = tb.Rows.Find(3); row.Delete();row.Delete(); da.Update(ds, datatable);da.Update(ds, datatable); 第9章ASPNET操作数据库15 使用使用 ExecuteReader()ExecuteReader()操作数据库操作数据库 , ExecuteReader()ExecuteReader()方法返回的是一个方法返回的是一个 SqlDataReader SqlDataReader 对象或对象或 OleDbDataReaderOleDbDataRead

26、er对象。对象。 当使用当使用 DataReader DataReader 对象时,不会像对象时,不会像 DataSet DataSet 那样提供无连接的数据库副那样提供无连接的数据库副 本,本,DataReader DataReader 类被设计为产生只读、只进的数据流。类被设计为产生只读、只进的数据流。 这些数据流都是从数据库返回的。所以,每次的访问或操作只有一这些数据流都是从数据库返回的。所以,每次的访问或操作只有一 个记录保个记录保 存在服务器的内存中。存在服务器的内存中。 相比与相比与 DataSet DataSet 而言,而言,DataReader DataReader 具有较快的

27、访问能力,并且能够使用较具有较快的访问能力,并且能够使用较 少的服务器资源。少的服务器资源。 DataReader DataReader 对象提供了对象提供了“游标游标”形式的读取方法,当从结果中读取了一行形式的读取方法,当从结果中读取了一行 ,则,则“游标游标”会继续读取到下一行。通过会继续读取到下一行。通过 Read Read 方法可以判断数据是否还有方法可以判断数据是否还有 下一行,如果存在数据,则继续运行并返回下一行,如果存在数据,则继续运行并返回 truetrue,否则返回,否则返回 falsefalse。 第9章ASPNET操作数据库16 示例代码如下示例代码如下: : strin

28、g str = string str = server=(local);database=mytable;uid=sa;pwd=sa; server=(local);database=mytable;uid=sa;pwd=sa; SqlConnection con = new SqlConnection(str);SqlConnection con = new SqlConnection(str); con.Open(); con.Open(); /打开连接打开连接 string strsql = select string strsql = select * * from mynews; f

29、rom mynews; /SQL /SQL 查询语句查询语句 SqlCommand cmd = new SqlCommand(strsql, con); SqlCommand cmd = new SqlCommand(strsql, con); SqlDataReader rd = cmd.ExecuteReader(); /SqlDataReader rd = cmd.ExecuteReader(); /初始化初始化 DataReader DataReader 对象对象 while (rd.Read()while (rd.Read() Response.Write(rdtitle.ToStr

30、ing(); Response.Write(rdtitle.ToString(); /通过索引获取列通过索引获取列 rd.Close(); rd.Close(); /关闭关闭 DataReader DataReader 对象对象 第9章ASPNET操作数据库17 ExecuteReader()ExecuteReader()可以执行插入、更新以及删除等,示例代码如下可以执行插入、更新以及删除等,示例代码如下: : SqlConnection con = new SqlConnection(str); SqlConnection con = new SqlConnection(str); con.

31、Open(); con.Open(); strsql = insert into mynews values (strsql = insert into mynews values (执行更新后的标题执行更新后的标题); ); SqlCommand cmd = new SqlCommand(strsql, con); SqlCommand cmd = new SqlCommand(strsql, con); SqlDataReader rd = cmd.ExecuteReader(); SqlDataReader rd = cmd.ExecuteReader(); while (rd.Read

32、() while (rd.Read() Response.Write(rdtitle.ToString() + );Response.Write(rdtitle.ToString() + ); rd.Close(); rd.Close(); 当使用当使用 Read Read 方法遍历读取数据库时,并不会显示相应的数据信息,方法遍历读取数据库时,并不会显示相应的数据信息, 因为不是查询语句,则返回一个没有任何数据的因为不是查询语句,则返回一个没有任何数据的 System.Data.OleDb.OleDbDataReader System.Data.OleDb.OleDbDataReader 类型

33、的集(类型的集(EOFEOF)。)。 第9章ASPNET操作数据库18 使用使用 ExecuteNonQuery()ExecuteNonQuery()操作数据库时,操作数据库时,ExecuteNonQuery()ExecuteNonQuery()并不返回并不返回 DataReader DataReader 对象,返回的是一个整型的值,代表执行某个对象,返回的是一个整型的值,代表执行某个 SQL SQL 语句后,在语句后,在 数据库中影响的行数。数据库中影响的行数。 ExecuteNonQuery()ExecuteNonQuery()通常情况下为数据库事务处理的首选,当需要执行插入通常情况下为数

34、据库事务处理的首选,当需要执行插入 、删除、更新等操作时,首选、删除、更新等操作时,首选 ExecuteNonQuery()ExecuteNonQuery()。 对于更新、插入和删除的对于更新、插入和删除的 SQL SQL 句,句,ExecuteNonQuery()ExecuteNonQuery()方法的返回值为该命方法的返回值为该命 令所影响的行数。对于令所影响的行数。对于 “CREATE TABLE”CREATE TABLE”和和“DROP TABLE”DROP TABLE”语句,返回值语句,返回值 为为 0 0,而对于所有其他类型的语句,返回值为,而对于所有其他类型的语句,返回值为-1-

35、1。 注意:有些项目中,通过判断注意:有些项目中,通过判断 ExecuteNonQuery()ExecuteNonQuery()的返回值来判断的返回值来判断 SQL SQL 语语 句是否执行成功,这样是有失偏颇的,因为当使用创建表的语句时,就算执句是否执行成功,这样是有失偏颇的,因为当使用创建表的语句时,就算执 行成功也会返回行成功也会返回-1-1。 第9章ASPNET操作数据库19 ExecuteNonQuery()ExecuteNonQuery()操作数据示例代码如下所示:操作数据示例代码如下所示: string str = string str = server=(local);data

36、base=mytable;uid=sa;pwd=sa;server=(local);database=mytable;uid=sa;pwd=sa; SqlConnection con = new SqlConnection(str); SqlConnection con = new SqlConnection(str); con.Open(); con.Open(); string strsql = delete from mynews where id4; string strsql = delete from mynews where id4; SqlCommand cmd = new S

37、qlCommand(strsql, con); SqlCommand cmd = new SqlCommand(strsql, con); /返回影响行数返回影响行数 Label1.Text = Label1.Text = 该操作影响了该操作影响了 + cmd.ExecuteNonQuery() + + cmd.ExecuteNonQuery() + 行行; 第9章ASPNET操作数据库20 ExecuteScalar()ExecuteScalar()方法也用来执行方法也用来执行SQLSQL语句语句 , 但是但是 ExecuteScalar()ExecuteScalar()执行执行 SQLSQ

38、L语句后的返回值与语句后的返回值与 ExecuteNonQuery()ExecuteNonQuery()并不相同,并不相同,ExecuteScalar()ExecuteScalar()方法方法 的返回值的数据类型是的返回值的数据类型是 Object Object 类型。类型。 如果执行的如果执行的SQLSQL语句是一个查询语句(语句是一个查询语句(SELECTSELECT),则返回结果是查询后的第),则返回结果是查询后的第 一行的第一列,如果执行的一行的第一列,如果执行的SQLSQL语句不是一个查询语句,则会返回一个未实语句不是一个查询语句,则会返回一个未实 例化的对象,必须通过类型转换来显示

39、。例化的对象,必须通过类型转换来显示。 示例代码如下所示:示例代码如下所示: string str = string str = server=(local);database=mytable;uid=sa;pwd=saserver=(local);database=mytable;uid=sa;pwd=sa ; SqlConnection con = new SqlConnection(str); SqlConnection con = new SqlConnection(str); /创建连接对象创建连接对象 con.Open(); con.Open(); string strsql =

40、select string strsql = select * * from mynews order by id desc; from mynews order by id desc; SqlCommand cmd = new SqlCommand(strsql, con);SqlCommand cmd = new SqlCommand(strsql, con); Label1.Text = Label1.Text = 查询出了查询出了 Id Id 为为 + cmd.ExecuteScalar(); + cmd.ExecuteScalar(); 第9章ASPNET操作数据库21 当插入一条数

41、据信息时,常常需要马上知道刚才插入的值,则可以使当插入一条数据信息时,常常需要马上知道刚才插入的值,则可以使 用用 ExecuteScalar()ExecuteScalar()方法。示例代码如下所示:方法。示例代码如下所示: string str = string str = server=(local);database=mytable;uid=sa;pwd=sa;server=(local);database=mytable;uid=sa;pwd=sa; SqlConnection con = new SqlConnection(str); SqlConnection con = new

42、SqlConnection(str); con.Open(); con.Open(); string strsql = insert into mynews values string strsql = insert into mynews values (刚刚插入的刚刚插入的 id id 是多少是多少?)?) SELECT SELECT IDENTITYIDENTITY as bh; as bh; SqlCommand cmd = new SqlCommand(strsql, con);SqlCommand cmd = new SqlCommand(strsql, con); Label1.

43、Text = Label1.Text = 刚刚插入的行的刚刚插入的行的 id id 是是 + cmd.ExecuteScalar(); + cmd.ExecuteScalar(); 第9章ASPNET操作数据库22 在在 Web Web 应用程序的开发过程中,应用程序的开发过程中,Web Web 安全是非常重要的,现存的很多网站安全是非常重要的,现存的很多网站 也都存在一些非常严重的安全漏洞,其中也都存在一些非常严重的安全漏洞,其中 SQL SQL 注入是非常常见的漏洞,如注入是非常常见的漏洞,如 果将查询语句进行参数化查询,可以减少果将查询语句进行参数化查询,可以减少 SQL SQL 注入漏

44、洞的概率,参数化查注入漏洞的概率,参数化查 询示例代码如下所示。询示例代码如下所示。 string strsql = select string strsql = select * * from mynews where id= from mynews where id= idid; 上述代码使用了参数化查询,在存储过程中,参数化是非常常见的,存储过上述代码使用了参数化查询,在存储过程中,参数化是非常常见的,存储过 程通过程通过 Command Command 对象进行参数的添加和赋值。同样,参数化查询也可以通对象进行参数的添加和赋值。同样,参数化查询也可以通 过过 Command Comma

45、nd 对象进行添加和赋值,参数化查询过程如下所示对象进行添加和赋值,参数化查询过程如下所示: : 创建一个创建一个 Command Command 对象。对象。 Command Command 对象增加一个参数。对象增加一个参数。 通过索引对通过索引对 Command Command 参数进行赋值。参数进行赋值。 执行执行 ExecuteReader ExecuteReader 方法返回个方法返回个 DataReader DataReader 对象。对象。 第9章ASPNET操作数据库23 通过通过 Command Command 对象可以为存储过程,以及参数化查询语句进行参数对象可以为存储过

46、程,以及参数化查询语句进行参数 的添加,示例代码如下所示的添加,示例代码如下所示: : string str = string str = server=(local);database=mytable;uid=sa;pwd=sa; server=(local);database=mytable;uid=sa;pwd=sa; SqlConnection con = new SqlConnection(str);SqlConnection con = new SqlConnection(str); con.Open();con.Open(); string strsql = select str

47、ing strsql = select * * from mynews where id = from mynews where id = bhbh; SqlCommand cmd = new SqlCommand(strsql, con); SqlCommand cmd = new SqlCommand(strsql, con); cmd.Parameters.Add(cmd.Parameters.Add(bhbh, SqlDbType.Int); , SqlDbType.Int); /增加参数增加参数bhbh cmd.Parameters0.Value = 4; cmd.Parameter

48、s0.Value = 4; /通过索引为参数赋值通过索引为参数赋值 SqlDataReader dr = cmd.ExecuteReader(); SqlDataReader dr = cmd.ExecuteReader(); while (dr.Read() while (dr.Read() Response.Write(drtitle.ToString()+);Response.Write(drtitle.ToString()+); 参数化查询能够有效的解决一些安全问题,提高参数化查询能够有效的解决一些安全问题,提高 Web Web 应用的安全性应用的安全性 。 注意:如果未初始化注意:如

49、果未初始化 Parameter Parameter 数据类型的属性,但设置了数据类型的属性,但设置了 Value Value 属性,那么属性,那么 Parameter Parameter 会自动选择合适的数据类型。会自动选择合适的数据类型。 第9章ASPNET操作数据库24 在数据库操作中,已经有了在数据库操作中,已经有了 SQL SQL 语句,为何还需要存储过程。因为存储过语句,为何还需要存储过程。因为存储过 程有程有 SQL SQL 语句不能具备的特点和优点,以至于存储过程能在严格的数据库语句不能具备的特点和优点,以至于存储过程能在严格的数据库 驱动的应用程序中起到重要的作用。存储和过程有

50、点包括:驱动的应用程序中起到重要的作用。存储和过程有点包括: 事务处理。事务处理。 存储过程中,包括多个存储过程中,包括多个 SQL SQL 语句,存储过程中的语句,存储过程中的 SQL SQL 语句属于事务处理的范畴。语句属于事务处理的范畴。 也就是说,存储过程类似于一个函数,当执行存储过程时,存储过程中的也就是说,存储过程类似于一个函数,当执行存储过程时,存储过程中的 SQL SQL 语语 句要不都执行,要不都不执行。句要不都执行,要不都不执行。 速度和性能。速度和性能。 存储过程由数据库服务器编译和优化,优化包括使用存储过程在运行时所存储过程由数据库服务器编译和优化,优化包括使用存储过程

51、在运行时所 必须的特定数据库的结构信息,这样在执行过程中会节约很多时间。存储必须的特定数据库的结构信息,这样在执行过程中会节约很多时间。存储 过程完全在数据库服务器上执行,避免了大量的过程完全在数据库服务器上执行,避免了大量的 SQL SQL 语句代码的传递,语句代码的传递, 对于循环使用对于循环使用 SQL SQL 语句而言,存储过程在速度和性能上都被优化。语句而言,存储过程在速度和性能上都被优化。 第9章ASPNET操作数据库25 过程控制。过程控制。 在编写存储过程中,可以使用在编写存储过程中,可以使用 IF ELSEIF ELSE、FOR FOR 以及以及 WHILE WHILE 循环

52、,这些语循环,这些语 句并不能在句并不能在 SQL SQL 语句中编写,语句中编写, 但是可以在存储过程中编写。当需要进行但是可以在存储过程中编写。当需要进行 大量的和复杂的操作时,大量的和复杂的操作时,SQL SQL 语句需要通过和编程语言一同编写才能实现语句需要通过和编程语言一同编写才能实现 ,而且实现复杂。相比之下,存储过程可以对过程进行控制。,而且实现复杂。相比之下,存储过程可以对过程进行控制。 安全性。安全性。 存储过程也可以作为额外的安全层。开发人员或者用户,都只能对数据库存储过程也可以作为额外的安全层。开发人员或者用户,都只能对数据库 中的存储过程进行使用,而无法直接对表进行数据

53、操作,这样封装了数据中的存储过程进行使用,而无法直接对表进行数据操作,这样封装了数据 操作,提高安全性。操作,提高安全性。 第9章ASPNET操作数据库26 减少网络流量和通信。减少网络流量和通信。 存储过程是在数据库服务器上运行的,在使用存储过程中,无需将大量的存储过程是在数据库服务器上运行的,在使用存储过程中,无需将大量的 SQL SQL 语句代码传递给数据库服务器,而只需告诉数据库服务器执行哪个存语句代码传递给数据库服务器,而只需告诉数据库服务器执行哪个存 储过程即可,而数据库服务器则会自行执行中间处理操作,储过程即可,而数据库服务器则会自行执行中间处理操作, 而不会通过而不会通过 网络

54、传递不必要的数据。网络传递不必要的数据。 模块化。模块化。 正如代码编写规范和设计模式一样,通常情况下,开发团队或者公司需要正如代码编写规范和设计模式一样,通常情况下,开发团队或者公司需要 严谨的代码编写风格和良好的协调能力,例如一个团队有人专门负责编码严谨的代码编写风格和良好的协调能力,例如一个团队有人专门负责编码 ,有人专门负责数据库开发,那么可以让数据库开发人员负责数据库的开,有人专门负责数据库开发,那么可以让数据库开发人员负责数据库的开 发,而编码的程序员只需要使用数据库开发人员设计的存储过程即可。在发,而编码的程序员只需要使用数据库开发人员设计的存储过程即可。在 这种情况下,数据库操

55、作和应用程序编码的操作被分开,在维护、管理中这种情况下,数据库操作和应用程序编码的操作被分开,在维护、管理中 ,也非常方便,如果数据库存储过程的代码出现问题,则只需要修改存储,也非常方便,如果数据库存储过程的代码出现问题,则只需要修改存储 过程中的代码即可。过程中的代码即可。 第9章ASPNET操作数据库27 示例代码如如下所示:示例代码如如下所示: string str = string str = server=(local);database=mytable;uid=sa;pwd=Sa; server=(local);database=mytable;uid=sa;pwd=Sa; Sql

56、Connection con = new SqlConnection(str);SqlConnection con = new SqlConnection(str); con.Open(); con.Open(); /使用存储过程使用存储过程 SqlCommand cmd = new SqlCommand(“getdetail”, con); SqlCommand cmd = new SqlCommand(“getdetail”, con); /设置设置 Command Command 对象的类型对象的类型 cmd.CommandType = CommandType.StoredProcedu

57、re; cmd.CommandType = CommandType.StoredProcedure; 第9章ASPNET操作数据库28 /增加参数增加参数 id id SqlParameter spr = cmd.Parameters.Add(SqlParameter spr = cmd.Parameters.Add(iid, SqlDbType.Int); d, SqlDbType.Int); spr = cmd.Parameters.Add(spr = cmd.Parameters.Add(titltitle, SqlDbType.NChar,50); e, SqlDbType.NChar

58、,50); spr.Direction = ParameterDirection.Output; spr.Direction = ParameterDirection.Output; /该参数是输出参数该参数是输出参数 spr = cmd.Parameters.Add(spr = cmd.Parameters.Add(“count“count”, SqlDbType.Int); ”, SqlDbType.Int); spr.Direction = ParameterDirection.ReturnValue; /spr.Direction = ParameterDirection.Return

59、Value; /该参数是返回值该参数是返回值 cmd.Parameterscmd.Parametersiid.Value = 1; d.Value = 1; /为参数初始化为参数初始化 cmd.Parameterscmd.Parameters“title“title”.Value = null; ”.Value = null; /为参数初始化为参数初始化 cmd.ExecuteNonQuery(); cmd.ExecuteNonQuery(); /执行存储过程执行存储过程 /获取返回值获取返回值 Label1.Text = cmd.ParametersLabel1.Text = cmd.Par

60、ameterscountcount.Value.ToString(); .Value.ToString(); 第9章ASPNET操作数据库29 使用控件,能够方便开发人员的开发和使用,但是很多情况下,不能使用控件,能够方便开发人员的开发和使用,但是很多情况下,不能 使用控件来实现,所以很多情况都需要使用使用控件来实现,所以很多情况都需要使用 ADO.NET ADO.NET 操作数据库中操作数据库中 的数据。的数据。 SQLHelper SQLHelper 是将是将 ADO.NET ADO.NET 中对数据操作的类和对象进行的封装的一中对数据操作的类和对象进行的封装的一 个类库,使用个类库,使用

温馨提示

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

评论

0/150

提交评论