《数据库访问技术》PPT课件.pptx_第1页
《数据库访问技术》PPT课件.pptx_第2页
《数据库访问技术》PPT课件.pptx_第3页
《数据库访问技术》PPT课件.pptx_第4页
《数据库访问技术》PPT课件.pptx_第5页
已阅读5页,还剩137页未读 继续免费阅读

下载本文档

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

文档简介

1、第七章 数据库访问技术,ADO.NET 数据绑定 数据控件,7.1 ADO.NET,ADO.NET概念 ADO.NET是重要的应用程序级接口,用于在.NET平台上提供数据访问服务。在ADO.NET中,可以使用新的.NET Framework数据提供程序来访问数据源。ADO.NET是专为基于消息的Web应用程序而设计的,同时还能够为其他应用程序结构提供较好的功能 ADO.NET的设计专门优化了使用SqlClient访问数据的过程,并使用ADO.NET对象实现其数据处理。其对象模式与ADO类似,由Connection(提供与数据源的连接)对象和Command对象(执行数据库命令以返回修改数据,运行

2、存储过程等)组成 。 ADO.NET 是一组向 .NET 程序员公开数据访问服务的类。 ADO.NET 通过数据处理将数据访问分解为多个可以单独使用或一前一后使用的不连续组件 ;ADO.NET的两个核心组件:DataSet和.NET Framework数据提供程序(Connection Command DataReader DataAdapter) DataSet是ADO.NET结构的核心组件 ADO.NET设计思想是从数据库中读取数据到内存中,构成内存中的一个数据库,7.1 ADO.NET,ADO.NET与ADO ADO.NET将焦点集中在脱机的数据上,也就是说当ADO.NET从数据库中获取

3、部分的数据集后便切断与数据库系统之间的连接,使它变成脱机状态 常驻内存数据表示形式不同;ADO使用Recordset对象,该对象类似一个单独的表;ADO.NET使用DataSet对象,该对象包含由DataTable对象表示的一个或者多个表 ADO.NET不再支持Server端的Cursor,纯粹是存储在内存中,所以执行效率上有所提高;同时,DataSet对象以XML的格式显示,所以能够在多个程序之间流通,达到数据共享的目的 为了访问各种不同的数据库系统或者不同的数据集,ADO.NET提供了若干个命名空间供ASP.NET使用;编程时只需要在程序代码中把这些命名空间导入,以声明正确的数据类型,而并

4、非像ASP页面那样是通过Server对象的CreatObject()方法创建,7.1 ADO.NET,System.Data命名空间 ADO.NET技术核心,它提供ADO.NET编程模型内的数据访问的基本功能。DataSet位于该命名空间中,它包括其他类如:DataTable、DataRow和DataView等。System.Data命名空间中还包括一个重要的枚举类型SqlDbType,它的成员表示了SQL Server内部的数据类型 System.Data.Common命名空间 该命名空间包含由.NET Framework数据提供程序共享的类。数据提供程序描述一个类的集合,这些类用于在托管空

5、间中访问数据源。可通过继承,也通过.NET数据访问提供程序来实现共享。DataAdapter是一个抽象类,用于连接DataSet对象和数据源 System.Data.OleDb System.Data.OleDb是第一个被加入到.NET Framework中的为数据访问提供程序的命名空间,它通过OLE DB提供程序。OleDbDataAdapter、OleDbCommand、OleDbDataReader和OleDbConnection提供了使用众多支持OLE DB数据源必需的所有功能,7.1 ADO.NET,System.Data.SqlClient命名空间 SqlClient提供程序是完全

6、为访问SQL Server数据库而设计的。 SQLDbDataAdapter、SQLDbCommand、SQLDbDataReader、SQLDbConnection和DataSet类能够对SQL Server数据库执行任何操作 System.Data.SqlTypes命名空间 该命名空间中主要包含映射到SQL Server数据库内部数据类型的结构 System.Data.Odbc 命名空间 用于 ODBC 的.NET Framework 数据提供程序描述用来访问托管空间中的 ODBC 数据源的类集合。 System.Data.OracleClient命名空间 用于 Oracle 的 .NET

7、 Framework 数据提供程序描述了用于在托管空间中访问 Oracle 数据源的类集合。,7.1 ADO.NET,ADO.NET结构,7.1 ADO.NET,ADO.NET的对象,7.1 ADO.NET,SQL数据库字段类型,7.1 ADO.NET,SQL数据库字段类型,SQL数据库字段类型 (1)二进制数据类型二进制数据包括 Binary、Varbinary 和 ImageBinary 数据类型既可以是固定长度的(Binary),也可以是变长度的。Binary(n) 是 n 位固定的二进制数据。其中,n 的取值范围是从 1 到 8000。其存储的大小是 n + 4 个字节。Varbina

8、ry(n) 是 n 位变长度的二进制数据。其中,n 的取值范围是从 1 到 8000。其存储的大小是 n + 4个字节,不是n 个字节。在 Image 数据类型中存储的数据是以位字符串存储的,不是由 SQL Server 解释的,必须由应用程序来解释。例如,应用程序可以使用BMP、TIEF、GIF 和 JPEG 格式把数据存储在 Image 数据类型中。 如果要存储的各种二进制数据的大小比较一致,那么建议使用Binary(n)数据类型。如果将要存储的二进制数据之间的大小差别比较大,那么应该使用Varbinary(n)数据类型。如果将要存储的二进制数据大于8000字节,那么必须使用Varbina

9、ry(MAX)数据类型 (2)字符数据类型字符数据的类型包括 Char,Varchar 和 Text字符数据是由任何字母、符号和数字任意组合而成的数据。 Varchar 是变长字符数据,其长度不超过 8KB。Char 是定长字符数据,其长度最多为 8KB。超过 8KB 的ASCII 数据可以使用 Text数据类型存储。例如,因为 Html 文档全部都是 ASCII 字符,并且在一般情况下长度超过 8KB,所以这些文档可以 Text 数据类型存储在SQL Server 中。,(3)Unicode 数据类型Unicode 数据类型包括 Nchar,Nvarchar 和Ntext使用这种字符类型存储

10、的列可以存储多个字符集中的字符。当列的长度变化时,应该使用 Nvarchar 字符类型,这时最多可以存储 4000 个字符。当列的长度固定不变时,应该使用 Nchar 字符类型,同样,这时最多可以存储 4000 个字符。当使用 Ntext 数据类型时,该列可以存储多于 4000 个字符。 varchar在SQL Server中是采用单字节来存储数据的,nvarchar是使用Unico来存储数据的中文字符存储到SQL Server中会保存为两个字节(一般采用Unico编码),英文字符保存到数据库中,如果字段的类型为varchar,则只会占用一个字节,而如果字段的类型为nvarchar,则会占用两

11、个字节两字段分别有字段值:“我和coffee”。那么varchar字段占22+6=10个字节的存储空间,而nvarchar字段占82=16个字节的存储空间。如字段值只是英文可选择varchar,而字段值存在较多的双字节(中文、韩文等)字符时用nvarchar。 (4)日期和时间数据类型日期和时间数据类型包括 Datetime 和 Smalldatetime两种类型日期和时间数据类型由有效的日期和时间组成。 例如,有效的日期和时间数据包括“4/01/98 12:15:00:00:00 PM”和“1:28:29:15:01AM 8/17/98”。前一个数据类型是日期在前,时间在后;后一个数据类型是

12、时间在前,日期在后。在 Microsoft SQL Server中,日期和时间数据类型包括 Datetime 和 Smalldatetime 两种类型时,所存储的日期范围是从 1753 年 1 月 1 日开始,到9999 年12 月 31 日结束(每一个值要求 8 个存储字节)。使用 Smalldatetime 数据类型时,所存储的日期范围是 1900年 1 月 1日 开 始,到 2079 年 12 月 31 日结束(每一个值要求 4 个存储字节)。日期的格式可以设定。设置日期格式的命令如下:Set DateFormat format | format _var|其中,format | for

13、mat_var 是日期的顺序。有效的参数包括 MDY、DMY、YMD、YDM、MYD 和 DYM。在默认情况下,日期格式为MDY。,(5)数字数据类型数字数据只包含数字。数字数据类型包括正数和负数、小数(浮点数)和整数整数由正整数和负整数组成,例如 39、25、0-2和33967。在SQL Server 中,整数存储的数据类型是Int,Smallint和Tinyint。Int数据类型存储数据的范围大于 Smallint 数据类型存储数据的范围,而Smallint 据类型存储数据的范围大于Tinyint 数据类型存储数据的范围。使用 Int 存储数据的范围是从 -2 147 483 648 到

14、2 147 483 647(每一个值要求4个字节存储空间)。使用Smallint数据类型时,存储数据的范围从 -32 768 到 32 767(每一个值要求2个字节存储空间)。使用Tinyint 数据类型时,存储数据的范围是从0 到255(每一个值要求1个字节存储空间)。精确小数数据在 SQL Server 中的数据类型是 Decimal 和 Numeric。这种数据所占的存储空间根据该数据的位数来确定。在SQL Server 中,小数数据的数据类型是 Float 和 Real。例如,三分之一这个分数记作0.3333333,当使用近似数据类型时能准确表示。因此,从系统中检索到的数据可能与存储在

15、该列中数据不完全一样。 (6)货币数据表示正的或者负的货币数量 在 SQL Server 中,货币数据的数据类型是Money 和 SmallmoneyMoney数据类型要求 8 个存储字节,Smallmoney 数据类型要求 4 个存储字节。 (7)特殊数据类型特殊数据类型包括前面没有提过的数据类型。特殊的数据类型有3种,即 Timestamp、Bit 和 Uniqueidentifier。Timestamp 用于表示SQL Server 活动的先后顺序,以二进投影的格式表示。Timestamp 数据与插入数据的日期和时间没有关系。Bit 由 1 或者 0 组成。当表示真或者假、ON 或者 O

16、FF 时,使用 Bit 数据类型。 Uniqueidentifier 由 16 字节的十六进制数字组成,表示一个全局唯一的。当表的记录行要求唯一时,GUID是非常有用。例如,在客户标识号列使用这种数据类型可以区别不同的客户。,7.1 ADO.NET,ADO.NET支持的数据源 ADO.NET 1.0版本主要提供两种数据提供程序,分别是SQL Server.NET和OLE DB.NET数据提供程序。而ADO.NET1.1提供4种数据提供程序,除了1.0提供的两种之外,还包括OracleDB.NET数据提供程序和ODBC.NET数据提供程序。,7.1 ADO.NET,Connection对象 Co

17、nnection类主要处理对数据库的连接和管理数据库事务,它是操作数据库的基础。该类表示应用程序和数据源之间唯一的会话。 ConnectionString属性 :获取或设置用户打开数据库的连接字符串 AttachDBFilename 关键字:主数据库文件的名称,包括可连接数据库的完整路径名。该路经可以是绝对路径,也可以是相对路径,这取决于是否使用 DataDirectory 替换字符串。如果使用 DataDirectory,则对应的数据库文件必须存在于替换字符串指向的目录的子目录中。远程服务器、HTTP 及 UNC 路径名不受支持。必须按照如下方式使用关键字“database”(或其别名之一)

18、指定数据库名称: Connection Timeout 关键字:获取在尝试建立连接时终止尝试并生成错误之前所等待的时间(以秒为单位),默认值为15秒。值为0表示没有对等待时间进行设置,而不是表示没有等待时间。 Data Source 或Server关键字:要连接的 SQL Server 实例的名称或网络地址或其他数据源服务器名或文件名。可以在服务器名称之后指定端口号: 指定本地实例时,始终使用 (local)。 Initial Catalog 或Database关键字:当前数据库或连接打开后要使用的数据库的名称。 Integrated Security 或Trusted_Connection关

19、键字:当为 false 时,将在连接中指定用户 ID 和密码。当为 true 时,将使用当前的 Windows 帐户凭据进行身份验证。可识别的值为 true、false、yes、no 以及与 true 等效的 sspi(强烈推荐)。 默认为false。,AttachDbFileName=|DataDirectory|dataYourDB.mdf;integrated security=true;database=YourDatabase,server=tcp:servername, portnumber,7.1 ADO.NET,Password 或Pwd关键字:SQL Server 帐户登录的

20、密码。建议不要使用。为保持高安全级别,我们强烈建议您使用 Integrated Security 关键字。 User ID 或Uid关键字:SQL Server 登录帐户。建议不要使用。为保持高安全级别,我们强烈建议您使用 Integrated Security 关键字。 State属性:连接的当前状态。默认为Closed Broken:与数据源的连接中断。只有在连接打开之后才可能发生这种情况。可以关闭处于这种状态的连接,然后重新打开。 Closed:连接处于关闭状态。 Connecting:连接对象正在与数据源连接。 Executing :连接对象正在执行命令。 Fetching :连接对象

21、正在检索数据。 Open:连接处于打开状态。 ServerVersion 属性:获取包含客户端所连接到的服务器的版本的字符串。,7.1 ADO.NET,OLEDbConnection 使用ADO.NET连接到OLEDB数据源(Access、Excel)上时,需要使用OLEDbConnection对象。 建立一个Connection对象: Provider:数据源的程序提供者。例如:Access的提供者是Microsoft.Jet.OLE DB.4.0。 【例】如一个连接Access数据库的连接语句代码如下: OLEDbConnection还有open和close这两个常用方法,分别表示数据库的

22、打开和关闭。以下是一个如何创建和打开与OLE DB数据源的连接: OleDbconnection myconn=new Oledbconnection(“Provider=Microsoft.Jet.OLE DB.4.0;DataSource=c:database1.mdb”); Myconn.open(); /打开数据库 Myconn.close(); /关闭数据库,OleDbConnection myconnection=new OleDbConnection(ConnectionString),string ConnectionString=“rovider=Microsoft.Jet.

23、OLEDB.4.0;DataSource=c:Database1.mdb”,7.1 ADO.NET,SqlConnection SQL Server.NET数据提供程序使用SqlConnection对象提供了与Microsoft SQL Server版本7.0或更高版本的连接。例:8.1 建立一个SqlConnection连接 Conn.open(); /打开数据库 Conn.close(); /关闭数据库 Conn.ChangeDatabase(); /打开的SqlConnection更改当前数据库 OdbcConnection ODBC.NET数据提供程序使用OdbcConnection对

24、象提供了与ODBC数据源的连接。 Driver属性:获取为当前连接指定的 ODBC 驱动程序名称。它通常是 DLL 名称(例如 Sqlsrv32.dll)。在打开连接前,默认值一直为空字符串 ()。 OracleConnection Oracle.NET数据提供程序使用OracleConnection对象提供了与Oracle数据库的连接和操作。,SqlConnection conn=new SqlConnection(“DataSource=localhost; Integrated Security=SSPI;Initial Catalog=EXF_DB”);,ASP.NET数据库连接字符串

25、总结 一、使用OleDbConnection对象连接OLE DB数据源 1连接Access 数据库 Access 2000: Access 2003: Access 2007: 备注:Access数据库只提供两个连接属性provider(数据提供程序)和data source(数据源);Access20002003的文件格式是”.mdb”,,Access2007的文件格式是”.accdb”; Access的数据提供程序版本是向下兼容的,在Win7下测试使用Microsoft.Jet.OLEDB.3.5提示未在本地计算机上注册“Microsoft.Jet.OLEDB.3.5”提供程序。改用Mic

26、rosoft.Jet.OLEDB.4.0或者Microsoft.Ace.OLEDB12.0完全可以访问Access2000的数据库文件。当然也可以尝试使用微软提供的MDAC来修改provider的版本 2连接Excel数据库 Excel 2003: Excel 2007: 备注:在代码中引用工作表时,应将表名表示为”工作表名$”,遇到字段为数据库保留关键字时,给该字段名加上以示区别,如定义select 语句时:string connStr=“select * from login$ where username=abc and password=abc123 “; 如果在数据表中用数字作为文本

27、类型数据时,则应在数字前加单引号将默认的数值强行设定为文本类型。,“provider=Microsoft.Jet.Oledb.3.5;Data Source=Access文件路径”,“provider=Microsoft.Jet.Oledb.4.0;Data Source=Access文件路径”,“provider=Microsoft.Ace.Oledb.12.0;Data Source=Access文件路径”,“provider=Microsoft.Jet.OLEDB.4.0;Data Source=Access文件路径;extended properties=excel 8.0”,“pro

28、vider=Microsoft.Ace.OLEDB.12.0;Data Source=Access文件路径;extended properties=excel 12.0”,ASP.NET数据库连接字符串总结 二、使用SqlConnection对象连接SQL Server数据库 设置数据库文件路径的方法: 1使用绝对路径: 2使用服务器相对路径: 3使用最简单的相对路径: “|DataDirectory|”代表ASP.NET项目里自动创建的App_Data文件夹 1以SQL Server验证模式连接SQLServer (1)以数据库名连接方式 (2)以数据库文件完整路径连接方式 示例: Serv

29、er=.SQLEXPRESS; Database=DatabaseName; User ID =sa; Password=abc123” Server=.SQLEXPRESS; Initial Catalog =DatabaseName; Uid =sa; Pwd=abc123” Server=(local)SQLEXPRESS; AttachDbFilename=D:Solution1WebApp_Datadata.mdf;User ID =sa; Password=abc123” 备注:密码可以为空。,“AttachDbFilename=D:Solution1WebApp_Datadata

30、.mdf”,“AttachDbFilename= + System.Web.HttpContext.Current.Server.MapPath(App_DataDatabase.mdf),“AttachDbFilename=|DataDirectory|data.mdf”,Server=服务器名; Database=数据库名称; User ID=用户名; Password=密码 或者(使用缩写与别名) Server=服务器名; Initial Catalog=数据库名称; Uid=用户; Pwd=密码,“Serve=服务器名;AttachDbFilename=数据库文件路径;User ID=

31、用户名;Password=密码”,ASP.NET数据库连接字符串总结 2以Windows 验证模式连接SQL Server (1)以数据库名连接方式 (2)以数据库文件完整路径连接方式 示例: Server=服务器名; Database=数据库名称; Integrated Security=SSPI Server=(local)SQLEXPRESS; AttachDbFilename=D:Solution1WebApp_Datadata.mdf; Integrated Security=true” 备注:SSPI即为true 三、使用OdbcConnection对象连接ODBC数据源 示例:首

32、先要在计算机管理数据源配置好相对应的数据源(选择数据库类型,设置数据库文件路径与相对应的数据库名) Driver= Microsoft.Jet.OLEDB.4.0; Server=.SQLEXPRESS; Database=DatabaseName; Trusted_Connection=yes 四、使用OracleConnection对象连接Oracle数据库,“Server=服务器名; Database=数据库名称; Integrated Security=SSPI”,“Serve=服务器名;AttachDbFilename=数据库文件路径; Integrated Security=tru

33、e”,“Driver=数据库提供程序名;Server=服务器名; Database=数据库名;Trusted_Connection=yes”,“Data Source=Oracle8i; Integrated Security=yes”,ASP.NET数据库连接字符串总结 五、在ASP.NET项目中的web.config文件里配置数据库连接并在程序代码中获取连接字符串 1在 标签里添加连接 或者 在程序代码中获取 标签里的连接字符串: 引用命名空间: 2在标签里添加连接 或者 在程序代码中获取 标签里的连接字符串: 引用命名空间:, , ,Using System.Configuration

34、; string connStr = ConfigurationManager.ConnectionStringsConnectionName.ToString();, , ,Using System.Configuration ; string connStr = ConfigurationManager.AppSettingsConnectionName.ToString();,7.1 ADO.NET,Connection事件 具有两个事件,它们可用于从数据源中检索信息性消息或确定Connection的状态是否已被改变 InfoMessage:当从数据中返回信息性消息(指数据库中不会引发异

35、常的消息)时发生。 注意:1.InfoMessage事件从数据库中检索警告和信息性消息,异常信息不在检索范围内 2.对于SQL Server任何严重度等于小于10的消息都被视为信息性消息 3.InfoMessage事件接收SqlInfoMessageEventArgs对象,该对象在其Error属性中包含来自数据库消息的集合,用户可查询Error对象,以获取错误号和消息文本以及错误来源 StateChange:当Connection状态出现更改时发生 注意:1.只要Connection对象的状态发生变化,StateChange事件就会被激活 2.OriginalState指示Connection

36、在更改前的状态;CurrentStae指示Connection更改后的状态,7.1 ADO.NET,Command对象 对数据库的操作有查询、插入、删除和更新等,这些操作都是ASP.NET开发中经常用到的。在创建了一个Connection对象后,就需要创建Command对象实现对数据库的操作。 SqlCommand常用属性,7.1 ADO.NET,CommandType取值范围和意义,7.1 ADO.NET,SqlCommand常用方法,7.1 ADO.NET,SqlCommand常见构造函数和方法(例8.3) SqlCommand构造函数是初始化SqlCommand对象命令,它有4种方法重载

37、。也就是有4种方法可以定义Command对象。 第一种:new SqlCommand()初始化CommandText的值和初始化Connection的值都为空 第二种 :new SqlCommand(string)用string字符串的内容初始化CommandText的值,而Connection的属性值为空。 第三种:new SqlCommand(string cmd,SqlConnection conn)用cmd初始化CommandText的值,用conn初始化Connection的属性值。 第四种:new SqlCommand(string cmd,SqlConnection conn,T

38、ransaction)用cmd初始化CommandText的值,用conn初始化Connection的属性值,用Transaction初始化Transaction的属性值。,7.1 ADO.NET,比较如下的三种代码,可以看出它们执行的功能都是相同的。 String mycmd=”SELECT* FROM goods”; String myconn=”integrated security=SSPI;datasource=(local);initialcatalog=SPXS”; /方法一: SqlCommand sqlcmd=new SqlCommand() SqlConnection sq

39、lconn=new SqlConnection(myconn); Sqlcmd.CommandText=mycmd; sqlcmd.Connection=sqlconn; /方法二: SqlCommand sqlcmd=new SqlCommand(mycmd); SqlConnection sqlconn=new SqlConnection(myconn); Sqlcmd.Connection=sqlconn; /方法三: SqlCommand sqlcmd=new SqlCommand(mycmd,new SqlConnection(myconn); /方法四: SqlCommand sq

40、lcmd=new SqlCommand(mycmd,new SqlConnection(myconn),new SqlTransaction transaction);,7.1 ADO.NET,结构化查询语句SQL 1、SELECT语法 SELECTDISTINCT别名.字段名或表达式AS 列标题 FROM table_sourceWHERE search_conditionGROUP BY group_by_expressionORDER BY order_expressionASC/DESC 2、INSERT INTO语法 INSERT INTO 表名(字段列表)VALUES(字段值列表)

41、 3、DELETE语法 DELETE FROM 表名WHERE删除条件 4、UPDATE语法 UPDATE 表名 SET 字段名1=新字段值,字段名1=新字段值 WHERE 更新条件,7.1 ADO.NET,SQL存储过程 定义 存储过程(Stored Procedure)是一组为了完成特定功能的SQL语句集,是利用SQL Server所提供的Transact-SQL语言所编写的程序。功能是将常用或复杂的工作,预先用SQL语句写好并用一个指定名称存储起来, 以后需要数据库提供与已定义好的存储过程的功能相同的服务时,只需调用execute,即可自动完成命令。存储过程是由流控制和SQL语句书写的过

42、程,这个过程经编译和优化后存储在数据库服务器中,可由应用程序通过一个调用来执行,而且允许用户声明变量 。同时,存储过程可以接收和输出参数、返回执行存储过程的状态值,也可以嵌套调用。 特点 1.存储过程只在创造时进行编译,以后每次执行存储过程都不需再重新编译,而一般SQL语句每执行一次就编译一次,所以使用存储过程可提高数据库执行速度。 2.当对数据库进行复杂操作时(如对多个表进行Update,Insert,Query,Delete时),可将此复杂操作用存储过程封装起来与数据库提供的事务处理结合一起使用。 3.存储过程可以重复使用,可减少数据库开发人员的工作量 4.安全性高,可设定只有某些用户才具

43、有对指定存储过程的使用权,7.1 ADO.NET,类型 1.系统存储过程:以sp_开头,用来进行系统的各项设定.取得信息.相关管理工作。存储在master 2.本地存储过程:用户创建的存储过程是由用户创建并完成某一特定功能的存储过程,事实上一般所说的存储过程就是指本地存储过程。存储在用户定义的数据库中 3.临时存储过程:一是本地临时存储过程,以井字号(#)作为其名称的第一个字符,则该存储过程将成为一个存放在tempdb数据库中的本地临时存储过程,且只有创建它的用户才能执行它; 二是全局临时存储过程,以两个井字号(#)号开始,则该存储过程将成为一个存储在tempdb数据库中的全局临时存储过程,全

44、局临时存储过程一旦创建,以后连接到服务器的任意用户都可以执行它,而且不需要特定的权限。 4.远程存储过程:在SQL Server2005中,远程存储过程(Remote Stored Procedures)是位于远程服务器上的存储过程,通常可以使用分布式查询和EXECUTE命令执行一个远程存储过程。 5.扩展存储过程:扩展存储过程(Extended Stored Procedures)是用户可以使用外部程序语言编写的存储过程,而且扩展存储过程的名称通常以xp_开头。存储在master,7.1 ADO.NET,语法格式 1、创建存储过程:,CREATE PROCEDURE 所有者存储过程名 ( I

45、N | OUT | INOUT 参数名 数据类型VARYING=内定值 . . 参数 ) AS SQL语句 RETURN /IN 输入参数表示该参数的值必须在调用存储过程时指定,在存储过程中修改该参数的值不能被返回,为默认值; /OUT 输出参数该值可在存储过程内部被改变,并可返回; /INOUT 输入输出参数调用时指定,并且可被改变和返回; /每个参数名前要有一个“”符号; /每一个存储过程的参数仅为该程序内部使用,参数的类型除了IMAGE外,其他SQL erver所支持的数据类型都可使用。,7.1 ADO.NET,2、执行存储过程: 3、修改存储过程 4、删除存储过程,EXEC 存储过程名

46、,ALTER PROC 存储过程名 ( 参数1 . . 参数n ) AS SQL语句 RETURN,DROP PROCEDURE 存储过程名,7.1 ADO.NET,DataReader对象 数据库中的数据。一种是使用DataReader逐行地从数据源获得数据放进缓冲区并进行处理;二是使用DataSet对象来将数据放到内存中进行处理 数据读取器DataReader对象是一个简单的数据集,用于从数据源中检索只读、只进的数据流。 注意: 1.要创建DataReader对象,必须调用对象Command的ExecuteReader()方法 2.DataReader只能读取数据,没有提供创建、修改和删除

47、数据库记录的功能 3.DataReader是一种只进的读取数据方式,不能回头读取上一条记录 4.DataReader不能在IIS的内容中保持数据,而是把数据传递到显示位置 5.当使用Command对象的ExecuteReader方法时,返回的就是DataReader类型,查询结果在查询执行时返回,并存储在客户端的网络缓冲区中,直到使用DataReader的Read方法对它们发出请求。这种方法一次只在内存中存储一行,从而降低了系统开销。 6. DataReader和数据源类型紧密连接,所以它对应也有两种类型OleDbDataReader类和SqlDataReader类。,7.1 ADO.NET,

48、SqlDataReader主要属性和方法,7.1 ADO.NET,SqlDataReader的应用(例8.4) 定义一个SqlDataReader对象 Protected System.Data.Sqlclient.SqlDataReader sqlDataReader1 创建SqlCommand对象实例后,可以调用Command.ExecuteReader方法从数据源中检索行,然后把值赋给sqlDataReader1。 sqlDataReader1=sqlCommand1.ExecuteReader(); 随后调用sqlDataReader1的Read方法从查询的结果中获取行。Read方法返

49、回一个布尔值,可以通过这个值判断是否是结果集的最后一条记录。通常需要while语句来循环读取。基本模式是: While (sqlDataReader1.Read() . ,7.1 ADO.NET,DataAdapter 对象 DataAdapter对象可以用于检索和更新数据库,或从数据源中获取数据,填充DataSet对象中的表,以及对DataSet对象进行更改,提交回数据源,该对象是DataSet对象和实际数据源之间的桥梁 DataAdapter对象是可配置的,允许用户指定将哪些数据移入或移除数据集,经常采取的形式是对SQL语句或存储过程进行调用,这些语句或存储过程被调用时即可实现对数据库的读

50、写 DataAdapter和DataReader的区别 DataReader对象是通过打开一个连接来检索数据库的信息,然后执行SQL命令,再搜索要检索的记录,当不再有操作时关闭连接 DataAdapter对象仅仅在需要填充DataSet对象时才使用数据库连接,在完成操作后将释放所有服务器资源 DataAdapter对象的工作步骤一般有两种: 通过Command对象执行SQL语句从数据源中检索数据,将获取的结果填充的DataSet对象的表中 把用户对DataSet对象做出的更改写到数据源中,7.1 ADO.NET,SqlDataAdapter 属性和方法(例8.5),7.1 ADO.NET,Sq

51、lDataAdapter填充DataSet的过程(Fill) 通过DataAdapter的SelectCommand属性从数据库中检索出需要的数据。(SelectCommand其实是一个Command对象。) 通过DataAdapter的Fill方法把检索来的数据填充 DataSet。,SqlConnection sqlConnection1 = new SqlConnection ( Data Source=localhost ;Integrated Security=SSPI ;Initial Catalog=Northwind ) ;/创建数据连接SqlCommand selectCMD

52、 = new SqlCommand ( SELECT CustomerID , CompanyName FROM Customers , sqlConnection1 ) ;/创建并初始化SqlCommand对象SqlDataAdapter sqlDataAdapter1 = new SqlDataAdapter ( ) ;custDA.SelectCommand = selectCMD ;sqlConnection.Open ( ) ;/创建SqlDataAdapter对象,并根据SelectCommand属性检索数据DataSet dsDataSet1 = new DataSet ( )

53、;sqlDataAdapter1.Fill ( dsDataSet1 , Customers ) ;/使用SqlDataAdapter的Fill方法填充DataSetsqlConnection.Close ( ) ;/关闭数据连接,7.1 ADO.NET,Fill方法的多种重载 Fill(Data Table) 填充一个表,参数为被填充表的名称 Fill(DataSet)填充一个DataSet对象,参数为被填充对象的名称 Fill(DataSet,string)填充 一个DataSet对象,参数用于映射的源表名 Fill(DataSet,int StartRecord,int MaxRecor

54、ds,string)填充一个DataSet对象,startRecord 开始的记录号,maxRecords要检索的最大记录数,string用于表映射的源表的名称,注意:Fill 方法使用关联的 SelectCommand 属性所指定的 SELECT 语句从数据源中检索行。 与 SELECT 语句关联的连接对象必须有效,但不需要将其打开。 如果调用 Fill 之前连接已关闭,则将其打开以检索数据,然后再将其关闭。 如果调用 Fill 之前连接已打开,它将保持打开状态。 Fill 操作将行添加到 DataSet 中的目标 DataTable 对象,如果 DataTable 对象不存在,则创建这些对

55、象。 当创建 DataTable 对象时,Fill 操作通常只创建列名元数据。 但是,如果 MissingSchemaAction 属性设置为 AddWithKey,则还会创建适当的主键和约束。 Fill 方法支持以下情况:DataSet 包含多个 DataTable 对象,而这些对象的名称只有大小写不同。 在这种情况下,Fill 执行区分大小写的比较以查找相应的表,如果不存在完全匹配的表,则新建一个。 DataSet dataset = new DataSet(); dataset.Tables.Add(aaa); dataset.Tables.Add(AAA); adapter.Fill(

56、dataset, “aaa”); / 填充表aaa adapter.Fill(dataset, “Aaa”); / 新建表Aaa,并填充,7.1 ADO.NET,SqlDataAdapter操作DataSet实现更新数据库过程(Update) 当DataSet实例中包含数据发生更改后,此时调用Update方法,DataAdapter 将分析已作出的更改并执行相应的命令(INSERT、UPDATE 或 DELETE),并以此命令来更新数据库中的数据。如果DataSet中的DataTable是映射到单个数据库表或从单个数据库表生成,则可以利用 CommandBuilder 对象自动生成 DataA

57、dapter 的 DeleteCommand、InsertCommand 和 UpdateCommand。,SqlCommandBuilder sqlCommandBuilder1 = new SqlCommandBuilder ( sqlDataAdapter1 ) ; /以sqlDataAdapter1为参数来初始化SqlCommandBuilder实例 dsDataSet1.TablesCustomers.Rows0.Delete ( ) ; /删除DataSet中删除数据表Customers中第一行数据 sqlDataAdapter1.Update ( dsDataSet1 ,Cust

58、omers ) ; /调用Update方法,以DataSet中的数据更新从数据库 dsDataSet1.TablesCustomers.AcceptChanges ( ) ;,7.1 ADO.NET,SqlCommandBuilder 对象 SqlCommandBuilder对象自动生成单表命令,用于将对 DataSet 所做的更改与关联的 SQL Server 数据库的更改相协调。 SqlDataAdapter 不会自动生成实现 DataSet 的更改与关联的 SQL Server 实例之间的协调所需的 Transact-SQL 语句。但是,如果设置了 SqlDataAdapter 的 Se

59、lectCommand 属性,则可以创建一个 SqlCommandBuilder 对象来自动生成用于单表更新的 Transact-SQL 语句。然后,SqlCommandBuilder 将生成其他任何未设置的 Transact-SQL 语句。每当设置了 DataAdapter 属性,SqlCommandBuilder 就将其本身注册为 RowUpdating 事件的侦听器 一次只能将一个 SqlDataAdapter 与一个 SqlCommandBuilder 对象(或相反)互相关联。为了生成 INSERT、UPDATE 或 DELETE 语句,SqlCommandBuilder 会自动使用 SelectCommand 属性来检索所需的元数据集。如果在检索到元数据后(例如在第一次更新后)更改 SelectCommand,则应调用 RefreshSchema 方法来更新元数据。SelectCommand 还必须至少返回一个主键列或唯一的列。如果什么都没有返回,就会产生 InvalidOperat

温馨提示

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

评论

0/150

提交评论