第6章+ASPNET数据库编程_第1页
第6章+ASPNET数据库编程_第2页
第6章+ASPNET数据库编程_第3页
第6章+ASPNET数据库编程_第4页
第6章+ASPNET数据库编程_第5页
已阅读5页,还剩112页未读 继续免费阅读

下载本文档

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

文档简介

1、 在前面的章节中提到了实际开发需要用到数据库,数据库在任何应用程序开发中都非常重要。数据库通常被用来存储用户信息、新闻内容等数据,也是查询、搜索的基础条件。从本章开始,将介绍ASP.NET的数据库编程开发,现今大多数Web应用程序都基于数据库,如电子商务、网络选课、校友录等。数据库具有强大管理与存储数据的能力,ADO.NET是一个中间的数据访问层,ASP.NET通过ADO.NET来操作数据库。6.1ADO.NET的数据访问6.2数据源控件 6.3数据绑定控件 6.4LINQ 商业应用程序允许用户检索数据库中存储的数据,并以用户友好的界面来呈现数据。用户无需记住在数据库中检索或更新数据的数据库命

2、令。Microsoft 已经创建了一系列数据存取技术,帮助程序员构建有效的应用程序来管理数据,而不管其来源是什么。 以下是选择在应用程序中使用的数据存取技术的指导方针:了解了解 ADO.NET如果使用 Visual Basic、C# 或 C+ 来编写目标为 .NET Framework 的受管代码,应使用 ADO.NET。如果使用 C 或 C+ 来编写目标为 Windows 的本机代码,应使用 Microsoft 开放数据库连接 (ODBC)。如果正在编写已使用 COM 的基于 Microsoft Active Server Pages (ASP) 的应用程序、VB 6 组件对象模型 (COM

3、) 应用程序或 C+ 应用程序,应使用对象链接和嵌入 (OLE) DB。如果正在编写目标为 SQL Server 的 Java 代码,应使用 Java 数据库连接 (JDBC)。6.1 ADO.NET基础6.1ADO.NET的数据访问ADO.NET是.NET Framework中的一系列类库,它使开发人员更加方便地在开发过程中使用和操作数据。在ADO.NET中,大量复杂数据操作的代码被封装起来,所以开发人员在ASP.NET应用程序开发中,只需要编写少量的代码即可处理大量的操作。ADO.NET 是是 .NET 应用程序用来与数据库通讯的模应用程序用来与数据库通讯的模型,用于检索、访问和更新数据。

4、型,用于检索、访问和更新数据。ADO.NET 是 .NET 框架体系架构的一部分。了解了解 ADO.NET(续)(续)6.1.1 ADO.NET基础ADO.NET是基于万维网组织 (W3C) 制订的标准的对象模型。下图显示了 ADO.NET 对象模型。6.1.1 ADO.NET基础ADO.NET 对象模型的两个主要组件是:数据提供器数据集ADO.NET 对象模型(续)对象模型(续)被用于:连接到数据库。检索数据。存储数据集中的数据。读取检索的数据。更新数据库。有四种主要组件:连接连接(建立与数据源交互的通道建立与数据源交互的通道)命令命令(获取、插入、删除和修改获取、插入、删除和修改)Data

5、Reader(单向操作,以只读单向操作,以只读和和forword-oly模式获取数据模式获取数据)DataAdapter(双向操作,可以把双向操作,可以把数据更新到数据库,可以从数据库数据更新到数据库,可以从数据库获得数据获得数据)ConnectionCommandDataReaderDataAdapter.NET Framework 数据提供程序数据提供程序 1、SQLClient2、OLEDB3、Oracle4、ODBC由以下各项组成的集合:用于 SQL Server 的 .NET Framework 数据提供程序用于 OLEDB 的 .NET Framework 数据提供程序System

6、.Data.SqlClient 命名空间仅限于连接 SQL Server 数据库 7.0 或更高版本System.Data.OleDb 命名空间使用的名称空间 SQL Server using System.Data.SqlClientusing System.Data.SqlClient OLE DB using System.Data.OleDbOLE DB using System.Data.OleDb Oracle using System.Data.OracleClientusing System.Data.OracleClient ODBC using System.Data.Od

7、bcusing System.Data.OdbcADO.NET 对象模型的两个主要组件是:数据提供器数据集ADO.NET 对象模型(续)对象模型(续)基于内存基于内存的关系数据关系数据的表示数据集是从数据库检索的断开连接的、缓存的记录的集合。数据集是在 System.Data 命名空间的 DataSet 类中呈现的。数据集的主要组件如下所示:DataTableCollection DataRelationCollection DataTable DataRowCollection DataColoumnCollection ADO.NET 的主要特性如下所示:断开连接的数据体系架构数据集中缓存

8、的数据 可扩展性 以 XML 格式的数据传输 ADO.NET的特性的特性应用程序仅在检索和更新数据时连接到数据库。检索到数据后,与数据库的连接关闭。当需要更新数据库时,重新建立连接。数据检索和存储在数据集中。可像使用真实数据那样使用数据集中存储的记录。仅有的差异在于数据集是独立于数据源的,可与数据源保持断开连接的状态。数据库操作在数据集中执行,而非在数据库执行。因此,节约了资源,数据库可更有效地满足增长的用户需求。XML 是 ADO.NET 中数据传输的基本格式。因为数据集以 XML 格式来存储,可以在支持 XML 的不同类型应用程序之间进行传输6.1.2 连接数据库ADO.NET通过ADOC

9、onnection连接到数据库,与ADO的Connection对象相似的是,ADOConnection同样包括Open和Close方法。Open表示打开数据库连接,Close表示关闭数据库连接。在每次打开数据库连接后,都需要关闭数据库连接。要创建和管理连接,你需要:创建连接对象。创建命令对象。打开连接对象。在命令对象中执行 SQL 语句。关闭连接对象。创建和管理连接创建和管理连接准备工作准备工作创建数据库配置安全性Sql server和windows身份验证Sa帐号.NET Framework 数据提供程序Connection 类SQL 数据提供程序SqlConnectionOLE DB 数据

10、提供程序OleDbConnectionOracle 数据提供程序OracleConnectionODBC 数据提供程序OdbcConnection在 ADO.NET 中,必须显式关闭连接,才能释放实际的数据库连接方法属性SqlConnection connection = new SqlConnection();connection.ConnectionString =Data Source=SQLSERVER01; Initial Catalog=HR; User ID=sa; Password=password;创建一个 SqlConnection 对象。SqlConnection 类用于

11、连接到SQL ServerConnectionString属性提供了用来与数据库建立连接的信息,如数据源和数据库名称。当连接开启时使用的服务器的名称数据库的名称它用来指定服务器登录帐户服务器登录帐户的登录密码创建连接对象创建连接对象执行以下步骤为数据库创建一个连接:6.1.2 连接数据库连接字串格式如下。server=服务器地址;database=数据库名称;uid=数据库用户名;pwd=数据库密码;示例代码如下。string connString; /声明连接字串connString = “server=(local);database=Forum;uid=sa;pwd=123654789;

12、6.1.2 连接数据库在web.config配置文件中保存连接字符串。在web.config中统一配置网站数据库连接字符串,这样整个网站项目中需要用到连接字符串时,只需要使用ConfigurationManager类中的ConnectionStrings属性来调用即可。下面是在web.config中配置连接字符串的代码。 6.1.2 连接数据库在程序中调用数据库连接字符串的代码如下。private static readonly string ConnString = ConfigurationManager.ConnectionStrings networkcn.ConnectionStri

13、ng;6.1.3 与数据库交互整个数据库操作的过程可以分为3个步骤:第一,创建数据库连接;第二,执行数据操作命令;第三,关闭数据库。实现这个3个过程的完整步骤如下。 (1)创建一个连接对象。 (2)使用对象的Open方法打开连接。 (3)创建一个封装SQL命令的对象。 (4)调用执行命令的对象。 (5)执行数据库操作。 (6)执行完毕,释放连接。6.1.3 与数据库交互6.1.3 与数据库交互Command执行对象 Command对象可以使用数据命令直接与数据源进行通信。例如,当需要执行一条插入语句,或者删除数据库中的某条数据时,就需要使用Command对象。Command对象的属性包括了数据

14、库在执行某个语句的所有必要的信息,这些信息如下。 Name:Command的程序化名称。 Connection:对Connection对象的引用。 CommandType:指定是使用SQL语句还是存储过程,默认情况下是SQL语句。 CommandTest:命令对象包含的SQL语句或存储过程名。 Parameters:命令对象的参数。创建命令对象创建命令对象.NET Framework 数据提供程序Command 类SQL 数据提供程序SqlCommandOLE DB 数据提供程序OleDbCommandOracle 数据提供程序OracleCommandODBC 数据提供程序OdbcComma

15、nd与数据库建立连接之后,可以使用 Command 对象执行命令并从数据源返回结果创建命令对象创建命令对象方法属性6.1.3 与数据库交互Command执行对象 在SqlCommand类中定义用来执行SQL语句的方法如下。 ExecuteNonQuery():执行SQL语句并返回所影响的行,常用于执行一个不返回任何结果的操作。在上面实例中就是使用的这个方法向数据库中插入一条新的记录。 ExecuteReader():执行查询语句并返回SqlDataReader,常用于返回记录集的操作,如select * from tbClass;。 ExecuteScalar():执行查询并返回结果的第一行第

16、一列,常用于返回一个值的操作,如select count(*) from tbClass;。6.1.3 与数据库交互Command执行对象 通常创建一个Command对象的步骤如下。 声明一个有效的Connection对象。 声明一个有效的Command对象. 为Command对象指定需要操作的SQL语句字符串和关联的Connection对象的实例。 打开Connection对象。 执行Command对象的各种方法进行数据库操作。 关闭Connection对象。SqlCommand cmd = newSqlCommand (“SELECT * FROMmonthlysalary“,connec

17、tion);创建命令对象创建命令对象 要执行 SQL 语句,需要在 System.Data.SqlClient 命名空间中创建 SqlCommand 类的实例。传递到SqlCommnad 对象的两个参数是:要执行的SQL查询和SqlConnection 对象。执行以下步骤以创建命令对象:/SqlConnection connectionconnection.Open();打开连接对象打开连接对象它打开一个由ConnectionString属性指定的属性设置的数据库连接。执行以下步骤以打开连接:要执行命令对象中传递的查询,可调用以下方法的其中之一:在命令对象中执行在命令对象中执行 SQL 语句语

18、句/Creating a SqlConnection objectSqlConnection connection = new SqlConnection();/Creates a connection string to the HR databaseconnection.ConnectionString = Data Source= SQLSERVER01; Initial Catalog=HR; User ID=sa; Password=niit#1234;connection.Open();/Creating a SqlCommand objectSqlCommand cmd = ne

19、w SqlCommand(select * from monthlysalary, connection);/Creating SqlReader objectSqlDataReader myReader = cmd.ExecuteReader();6.1.3 与数据库交互DataReader对象DataReader对象也是在线数据操作对象,它读取数据库的方式为“只读只进”。所谓只读,就是通过DataReader对象只能进行数据的读取操作;只进,是指读取记录的游标只会不断地前进,不能在读取完第4条数据之后,再返回去读取第3条记录。DataReader对象具有以下特点。 快速的数据库访问。 只进

20、和只读,当对数据库的操作没有太大的要求时,可以使用DataReader显示数据。这些数据可以与单个list-bound控件绑定,也可以填充List接口。当不需要复杂的数据库处理时,DataReader能够较快地完成数据显示。DataAdapter对象能够自动地打开和关闭连接,而DataReader对象需要用户手动管理连接。DataReader对象和DataAdapter对象很相似,都可以从SQL语句和一个连接中初始化。6.1.3 与数据库交互DataReader对象创建DataReader对象必须经过以下几个步骤。 (1)创建和打开数据库连接。 (2)创建一个Command对象。 (3)从Co

21、mmand对象中创建DataReader对象。 (4)调用ExecuteReader对象。DataReader对象的Read方法可以判断DataReader对象中的数据是否还有下一行,并将游标下移到下一行。通过Read方法可以判断DataReader对象中的数据是否读完。 while (dr.Read() Response.Write(drtitle.ToString()+); 讲解用户登录例子通常情况下,Command对象用于数据的操作,如执行数据的插入和删除,也可以执行数据库结构的更改,包括表和数据库。string connString; /声明连接字串connString = serve

22、r=(local);database=Forum;uid=sa;pwd=123654789;SqlConnection conn = new SqlConnection(connString); /新建SQL连接conn.Open(); /打开数据库连接SqlCommand cmd = new SqlCommand(insert into tbClass values (className), conn); /建立Command对象在命令对象中执行在命令对象中执行 SQL 语句语句/SqlConnection connectionconnection.Close();关闭连接对象关闭连接对象它

23、关闭到数据库的连接。执行以下步骤以关闭一个连接:讲解添加用户的例子 ADO.NET允许以两种不同的方式从数据库中检索数据: 第一种方法是使用DataReader对象,它检索只读的、前向的数据流。 第二种技术是使用DataAdapter与DataSet类紧密配合以创建数据的内存表示。两种技术的主要区别,在于它们与数据库连接的方式: DataReader对象打开一个连接来检索数据库中的的信息,然后执行SQL命令,再搜索要检索的记录,最后当不再有操作需要关闭连接。 DataAdapter对象在确实需要填充DaraSet对象时,才使用数据库连接,在完成操作后将释放所有的胀务器资源。6.1.4 管理内存

24、数据ASP.NET 3.5从数据库中读取出数据主要是存储在内存中,合理管理内存中的数据,对于整体发挥网站项目性能具有重要的作用。本节主要介绍如何使用DataSet管理内存中的数据。DataSet对象是ADO.NET中非连接类型最主要的类。该类就像是一个小型的内存数据库系统,在该类中具有数据表、数据列、数据行、约束、表间关系等特性,DataSet对象为异构的数据源之间提供了一致的编程模型。6.1.4 管理内存数据数据集 数据集(DataSet)是断开连接的数据容器,DataSet的数据组织方式与数据库极其相似,实际在大多数情况下,DataSet中的数据都是数据库中数据的副本。但是,DataSet

25、还可以从XML、CSV文件中导入记录,这为开发人员提供了一致的编程模型。 DataSet中包含DataTable对象、数据列(DataColumn对象)、数据行(DataRow对象)、视图(DataView对象)、约束(Constraint对象)、关系(DataRelation对象)。DataSet是存储从数据库检索到的数据的对象是零个或多个表对象的集合,这些表对象由数据行和列、约束和有关表中数据关系的信息组成不直接与数据库交互在断开连接的环境中既可容纳数据库的数据,也可以容纳非数据库的数据源数据集具有其自己的对象模型,如下图所示。使用数据集和数据表(续)使用数据集和数据表(续)数据集实例是由

26、 DataSet 构造函数创建的在 System.Data 命名空间中定义。数据集的名称是可选的,不需要指定如果没有指定名称,则以默认名称 NewDataSet 创建数据集使用数据集和数据表(续)使用数据集和数据表(续)DataSet empDS = new DataSet(EmployeeDetails);或者DataSet empDS = new DataSet();DataSet常用属性和方法属性说明DataSetName 用于获取或设置当前数据集的名称Tables 用于检索数据集中包含的表集合方法说明Clear清除数据集中包含的所有表的所有行HasChanges 返回一个布尔值,指示数

27、据集是否更改了使用数据集和数据表(续)使用数据集和数据表(续)数据集中的数据以 DataTable 对象的形式存储DataTable 类属于 System.Data 命名空间使用数据集主要元素数据表使用数据集主要元素数据表DataTable objStudentTable = new DataTable(Students);创建 DataTable 对象的实例DataSet studentDS = new DataSet();DataTable objStudentTable = studentDS.Tables.Add(Students);创建 DataTable 的实例,然后将其添加到数据

28、集的 Tables 集合中属性说明Columns 表示列的集合或 DataTable 包含的 DataColumnConstraints 表示特定 DataTable 的约束集合PrimaryKey 表示作为 DataTable 主键的字段或 DataColumnRows表示行的集合或 DataTable 包含的 DataRow方法说明AcceptChanges提交对该表所做的所有修改NewRow 添加新的 DataRow使用数据集主要元素数据表使用数据集主要元素数据表DataColumn DataColumn 对象定义对象定义 DataTable 的列DataTable DataTable

29、的的 Columns Columns 属性含有对属性含有对 DataColumn 对象的引用使用数据集主要元素使用数据集主要元素 DataColumn可以为列指定的一些参数:可以为列指定的一些参数:列的名称列的名称列的数据类型列的数据类型是否列为只读是否列为只读是否列允许空值是否列允许空值是否列值在每一行必须是不同的是否列值在每一行必须是不同的是否列是自动递增的列是否列是自动递增的列是否列是表达式列是否列是表达式列DataTable objStudentTable = new DataTable(Students);DataColumn objStudentNumber = objStuden

30、tTable.Columns.Add ( StudentNo ,typeof(Int32);objStudentNumber.AllowDBNull = false; objStudentNumber.DefaultValue = 25; objStudentTable.Columns.Add(StudentName,typeof(String);objStudentTable.Columns.Add(StudentMarks,typeof(Double);使用多个 DataColumn 对象创建 DataTable使用数据集主要元素使用数据集主要元素 DataColumn DataTable

31、 对象还具有允许行在数据集中被访问的 Rows 集合。DataRow 对象表示 DataTable 中的实际数据下表描述了通过使用 DataRow 对象对行执行的各种方法:Add()InsertAt()Find()Select()Remove()RemoveAt()Delete()从表中暂时移除行向表的末尾附加行在指定的位置插入行通过主键值访问表中的行发现匹配指定条件的行移除指定的 DataRow 对象移除指定位置的行使用数据集主要元素使用数据集主要元素 DataRow /定义表结构,为Students表添加学号、姓名、分数三列DataTable objStudentTable = new D

32、ataTable(Students);DataColumn objStudentNumber = new DataColumn(); objStudentNumber.DataType = objStudentTable.Columns.Add ( StudentNo ,typeof(string);objStudentNumber.AllowDBNull = false; objStudentNumber.DefaultValue = 25; objStudentTable.Columns.Add(StudentName,typeof(string);objStudentTable.Colu

33、mns.Add(StudentMarks,typeof(Double);/向表中填充数据DataRow objStudentRow;objStudentRow= objStudentTable.NewRow();objStudentRowStudentNo=101;objStudentRow“StudentName”=“张三;objStudentRowStudentMarks=55;objStudentTable.Rows.Add(objStudentRow);在 DataTable 对象中新建 DataRow6.1.4 管理内存数据DataAdapter适配器对象 在创建了数据库连接后,需要

34、对数据集DataSet进行填充,在这里就需要使用DataAdapter对象。在没有数据源时,DataSet对象对保存在Web窗体可访问的本地数据库是非常实用的,这样降低了应用程序和数据库之间的通信次数。然而DataSet必须要与一个或多个数据源进行交互,DataAdapter就提供了DataSet对象和数据源之间的连接。数据命令DataAdapterDataSetDataTable DataRow 集合DataColumn 集合Constraint 集合填充脱机数据库非永久连接数据适配器通过其属性和方法处理数据库和数据集之间的数据传输,通过表映射的过程显示数据。创建数据集之后,数据适配器使用表

35、映射的过程对数据库表中的列与数据集列进行映射。 数据适配器使用 TableMappings 属性,用来映射数据库表和数据集中的 DataTable 对象的 DatatableMapping 对象的集合。 SQL 数据提供程序SqlDataAdapter OLE DB 数据提供程序OleDbDataAdapter Oracle 数据提供程序OracleDataAdapter ODBC 数据提供程序OdbcDataAdapter DataAdapter 类的属性和方法属性说明TableMappings 容纳一个集合,该集合提供返回行和数据集之间的主映射方法说明Fill用于添加或刷新数据集,以便使数

36、据集与数据源匹配Update 将DataSet里面的数值存储到数据库服务器上DataAdapter 类的属性和方法属性说明InsertCommand 表示用于在数据库中插入新记录的 SQL 语句或存储过程UpdateCommand 表示用于在数据库中更新记录的 SQL 语句或存储过程DeleteCommand 表示用于从数据库中删除记录的 SQL 语句或存储过程SelectCommand 表示用于从数据库中选择记录的 SQL 语句或存储过程事件说明RowUpdated 在对数据源执行更新命令之后的过程中激发该事件RowUpdating 在对数据源执行命令更新之前的过程中激发该事件它设计为使用

37、Microsoft SQL Server 7 或更高版本提供最佳通信该适配器在数据集和 Microsoft SQL Server 之间起桥梁作用,提供用于保存和检索数据的接口与 SqlConnection 和 SqlCommand 相互配合使用创建创建 DataAdapter 对象、使用对象、使用 SelectCommand 属性属性:SqlConnection cn = new SqlConnection(constr);DataSet DataSet1 = new DataSet();SqlDataAdapter da = new SqlDataAdapter();SqlCommand c

38、md=new SqlCommand(Select * from Employees, cn);da.SelectCommand = cmd;da.Fill(DataSet1);使用数据适配器(续)使用数据适配器(续)创建 DataSet对象创建 SqlDataAdapter 对象传递 SQL查询到命令对象从Employees表检索记录用Employees表中的记录填充数据集为了更好的理解,我们再此先学习Session05里的内容填充dataset绑定dataset的表到控件 Dropdownlist Gridview绑定dataset表的视图到控件使用使用 InsertCommand 属性属性

39、:command = new SqlCommand( INSERT INTO Customers (CustomerID, CompanyName) + VALUES (CustomerID, CompanyName), connection); / Add the parameters for the InsertCommand. command.Parameters.Add(CustomerID, SqlDbType.NChar, 5)command.Parameters.Add(CompanyName, SqlDbType.NVarChar)adapter.InsertCommand =

40、 command; 使用使用UpdateUpdate方法方法SqlDataAdapter adapter = new SqlDataAdapter(); adapter.SelectCommand = new SqlCommand(queryString, connection); SqlCommandBuilder builder = new SqlCommandBuilder(adapter); connection.Open(); DataSet dataSet = new DataSet(); adapter.Fill(dataSet, tableName); /修改数据集里的数据Da

41、taTable dt=dataSet.TablestableName;DataRow row=dt.NewRow();row字段名=value;dt.Rows.Add(row); /如果没有 SqlCommandBuilder ,那么下面这句将会失败 adapter.Update(dataSet, tableName); 一般SQL语句中的参数 创建方式创建方式1 1string sqlstr=“select * from jobs where job_id=job_id”;SqlCommand cmd=new SqlCommand(sqlstr,con);SqlParameter SqlPa

42、rameter sp=cmd.Parameters.add(“job_id”,SqlDbType.Ssp=cmd.Parameters.add(“job_id”,SqlDbType.SmallInt);mallInt);sp.value=txtjobid.Text; con.Open();cmd.ExecuteReader(); 创建方式2string sqlstr=“select * from jobs where job_id=job_id”;SqlCommand cmd=new SqlCommand(sqlstr,con);SqlParameter sp=new SqlParameter

43、 sp=new SqlParameter(“job_id”,SqlDbType.SmallInt);SqlParameter(“job_id”,SqlDbType.SmallInt);cmd.Parameters.add(sp);cmd.Parameters.add(sp); sp.Direction = ParameterDirection.Input;sp.value=txtjobid.Text; con.Open();cmd.ExecuteReader();创建方式3(匿名方式)cmd.Parameters.Add(code,SqlDbType.Char,4).Value =0012;优

44、点:防SQL欺骗SQL欺骗select * from hrusers where cusername=David and cpassword=Cooperselect * from hrusers where cusername=David or or 1=1 -1=1 - and cpassword=Cooper修改登陆界面sqlstr = select * from hrusers where cusername=username and cpassword=pwd; cmd.CommandText = sqlstr; cmd.Parameters.Add(username, SqlDbT

45、ype.Char, 10).Value =txtuser.Text; cmd.Parameters.Add(pwd, SqlDbType.Char, 10).Value = txtpwd.Text; 执行存储过程(Parameters:Parameters:参数集合参数集合) 仅含输入参数仅含输入参数 SqlConnection con = new SqlConnection(constr); SqlCommand cmd = new SqlCommand(); cmd.Connection = con; cmd.CommandText = qy_college ; cmd.CommandTy

46、pe = CommandType.StoredProcedure; SqlParameter sp = new SqlParameter (code, SqlDbType.Char, 4); sp.Value = txtqy.Text; sp.Direction = ParameterDirection.Input; cmd.Parameters.Add(sp); 在使用在使用Transact-SQLTransact-SQL语言编程的过程语言编程的过程中,可以将某些需要多次调用的实现某中,可以将某些需要多次调用的实现某个特定任务的代码段编写成一个过程,个特定任务的代码段编写成一个过程,将其保存

47、在数据库中,并由将其保存在数据库中,并由SQL ServerSQL Server服务器通过过程名来调用它们,这些过服务器通过过程名来调用它们,这些过程就叫做存储过程。程就叫做存储过程。存储过程在创建时就被编译和优化,调存储过程在创建时就被编译和优化,调用一次以后,相关信息就保存在内存中用一次以后,相关信息就保存在内存中,下次调用时可以直接执行。,下次调用时可以直接执行。存储过程有以下特点:存储过程有以下特点:存 储 过 程 中 可 以 包 含 一 条 或 多 条存 储 过 程 中 可 以 包 含 一 条 或 多 条Transact-SQLTransact-SQL语句。语句。存储过程可以接受输入

48、参数并可以返回存储过程可以接受输入参数并可以返回输出值。输出值。在一个存储过程中可以调用另一个存储在一个存储过程中可以调用另一个存储过程。过程。存储过程可以返回执行情况的状态代码存储过程可以返回执行情况的状态代码给调用它的程序。给调用它的程序。使用存储过程有很多优点,具体如下:使用存储过程有很多优点,具体如下:实现了模块化编程,一个存储过程可以实现了模块化编程,一个存储过程可以被多个用户共享和重用。被多个用户共享和重用。存储过程具有对数据库立即访问的功能存储过程具有对数据库立即访问的功能。使用存储过程可以加快程序的运行速度使用存储过程可以加快程序的运行速度。使用存储过程可以减少网络流量。使用存

49、储过程可以减少网络流量。使用存储过程可以提高数据库的安全性使用存储过程可以提高数据库的安全性。在在SQL ServerSQL Server中的存储过程分为两类:即系中的存储过程分为两类:即系统提供的存储过程和用户自定义的存储过程统提供的存储过程和用户自定义的存储过程。系统存储过程:由系统自动创建,系统存储系统存储过程:由系统自动创建,系统存储过程出现在每个系统定义数据库和用户定义过程出现在每个系统定义数据库和用户定义数据库的数据库的syssys构架中。在构架中。在SQL Server 2005SQL Server 2005中中,可将,可将GRANTGRANT、DENYDENY和和REVOKER

50、EVOKE权限应用于系权限应用于系统存储过程。统存储过程。用户自定义存储过程:是指封装了可重用代用户自定义存储过程:是指封装了可重用代码的模块或例程,由用户创建,能完成某一码的模块或例程,由用户创建,能完成某一特定的功能。可以接受输入参数,返回输出特定的功能。可以接受输入参数,返回输出参数。参数。存储过程(Parameters:Parameters:参数集合参数集合)仅含输入参数仅含输入参数CREATE PROCEDURE qy_collegecode char(4)ASBEGIN select * from college where ccollegecode=code -0001ENDDB

51、PrametersDBPrameters对象的使用对象的使用- -执行存储过程 SqlConnection con = new SqlConnection(constr); SqlCommand cmd = new SqlCommand(); cmd.Connection = con; cmd.CommandText = qy_college ; cmd.CommandType = CommandType.StoredProcedure; SqlParameter sp = new SqlParameter (code, SqlDbType.Char, 4); sp.Value = txtqy

52、.Text; sp.Direction = ParameterDirection.Input; cmd.Parameters.Add(sp); 执行存储过程(Parameters:Parameters:参数集合参数集合) 含输入参数含输入参数, ,返回值返回值 SqlConnection con = new SqlConnection(); con.ConnectionString = Data Source=(local);Initial Catalog=HR;Integrated Security=True; try con.Open(); SqlCommand cmd = new Sql

53、Command(); cmd.Connection = con; CREATE PROCEDURE insert_college- Add the parameters for the stored procedure herecode char(4),name char(30),addr varchar(35),city char(20),state char(20),zip char(10),phone char(15)ASBEGINif (not exists(select * from college where ccollegecode=code)begininsert into c

54、ollege(cCollegeCode, cCollegeName, vCollegeAddress, cCity, cState, czip,cPhone) values(code,name,addr,city,state,zip,phone) return 1endelsereturn -1END存储过程含输入参数含输入参数, ,返回值返回值执行存储过程(含输入参数含输入参数, ,返回值返回值) )cmd.CommandText = insert_college; cmd.CommandType = CommandType.StoredProcedure;cmd.Parameters.Ad

55、d(code,SqlDbType.Char,4).Value =0012; cmd.Parameters.Add(name, SqlDbType.Char, 30).Value = STF;cmd.Parameters.Add(addr, SqlDbType.Char, 35).Value = USA; cmd.Parameters.Add(city, SqlDbType.Char, 20).Value = Louis; cmd.Parameters.Add(state, SqlDbType.Char, 20).Value = New York; cmd.Parameters.Add(zip,

56、 SqlDbType.Char, 10).Value = 43220-2821“cmd.Parameters.Add(phone, SqlDbType.Char, 15).Value = (614)451-1005;SqlParameter sp=cmd.Parameters.Add(result, SqlDbType.Int);sp.Direction = ParameterDirection.ReturnValue; cmd.ExecuteNonQuery(); int result = Convert.ToInt32(sp.Value); if (result = 1) MessageB

57、ox.Show(ok); else if (result =-1) MessageBox.Show(existing code); con.Close(); catch (Exception ex) MessageBox.Show(ex.Message); 6.2 数据源控件数据源控件用来配置数据源,当数据控件绑定数据源控件时,就能够通过数据源控件来获取数据源中的数据并显示,而无需通过程序实现数据源代码的编写。6.2.1 SQL数据源控件SQL数据源控件(SqlDataSource)是提供ASP.NET 3.5连接到SQL数据库的数据源控件,并且SqlDataSource能够与SQL Serv

58、er、Access、Oledb、Odbc以及Oracle等数据库进行交互。SqlDataSource控件提供数据的检索、插入、更新、删除、排序等功能,并且SqlDataSource在提供这些功能的同时,开发人员不需要手动编写任何代码。6.2.1 SQL数据源控件当SqlDataSource控件添加到页面后,会生成ASP.NET标签,示例代码如下。6.2.2 绑定到对象控件ASP.NET数据源控件,多数都是在两层应用程序层次结构中使用。ASP.NET充当的是表示层(网页)角色,而数据源控件充当的是数据层(数据库/XML文件等)角色。但是,常用的应用程序设计原则是将表示层与业务逻辑相分离,而将业务

59、逻辑封装在业务对象中。这些业务对象在表示层和数据层之间形成一层,从而生成一种三层应用程序结构。绑定到对象(ObjectDataSource)控件通过提供一种将相关页上的数据控件绑定到中间层业务对象的方法,为三层结构提供支持。在不使用扩展代码的情况下,ObjectDataSource使用中间层业务对象以声明方式对数据执行选择、插入、更新、删除、分页、排序、缓存和筛选操作。6.2.2 绑定到对象控件SqlDataSource用于两层模型中,页面直接访问数据库。ObjectDataSource用于三层模型中,也就是页面通过中间业务对象访问数据库的。ObjectDataSource的业务对象是可以用检

60、索或更新数据的业务对象,如Bin或App_Code目录中定义的对象。6.2.2 绑定到对象控件ObjectDataSource控件对象模型类似于SqlDataSource控件。ObjectDataSource公开一个TypeName属性,该属性指定要实例化来执行数据操作的对象类型,也就是类的名称。与SqlDataSource的命令属性类似,同样ObjectDataSource控件包括4个重要属性,这4个属性分别为SelectMethod、UpdateMethod、InsertMethod和DeleteMethod,分别用于指定要执行这些数据操作关联类型的方法。选择对象后,就可以配置Select

温馨提示

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

评论

0/150

提交评论