SQL Server 2008 高级主题

SQL Server 2008 高级主题
SQL Server 2008 高级主题

第11章SQL SERVER 2008高级主题

在SQL SERVER 2008中,用户可以使用.NET Framework兼容的任何语言来编写用户自定义内容,如用户自定义函数、存储过程、触发器以及SQL SERVER 2008中所没有数据类型。使用. NET Framework不仅能扩展SQL SERVER的数据类型,还能帮助用户实现某些复杂的功能。AD https://www.360docs.net/doc/d12319625.html, 2.0也提供了许多方便访问SQL SERVER 2008的对象,利用这些内容用户可以轻松实现对SQL SERVER及其他数据源的数据访问。.NET与SQL SERVER 2008紧密结合的优势体现在数据访问的便利性以及用户自定义内容的自由性,包括如何在.NET平台中使用C#语言创建用户自定义内容,以及轻松地实现数据访问等相关知道。

SQL SERVER 2008是一个全面的、集成的、端到端的数据解决方案,它为组织中的用户提供了一个更安全可靠、更高效的平台用于企业数据和商业智能应用。SQL SERVER 2008为IT专家和信息工作都带来了强大的熟悉的工具,同时降低了在从移动设备到企业数据系统的多平台上创建、部署、管理和使用企业数据和分析应用程序的复杂性。通过全面的功能集、与现有系统的互操作性以及对日常任务的自动化管理能力,SQL SERVER 2008为不同规模的企业提供了一个完整的数据解决方案。比如集成服务、分析服务、通知服务和报务服务等。

学习目标:

了解.NET平台与SQL SERVER 2008之间的关系

掌握在.NET平台中创建SQL SERVER项目

了解用户自定义函数的类型

掌握用户自定义存储过程的创建

理解用户定义类型类型

理解https://www.360docs.net/doc/d12319625.html,的基本内容

掌握使用SqlConnection对象连接数据库的方法

理解https://www.360docs.net/doc/d12319625.html,对XML的支持

理解SQL SERVER 2008的服务体系

11.1 NET Framework集成

.net开发平台是.NET Framework的简称,是为了简化在第三代Internet分布式环境下的应用程序开发,基于开发互联网标准和协议之上,实现异构语言和平台高度交互性,而构建的新一代的通信平台。

11.1.1 .NET Framework概述

NET Framework 是支持生成和运行下一代应用程序和XML Web Services 的内部Windo ws 组件。.NET Framework 旨在实现下列目标:

●提供一个一致的面向对象的编程环境,而无论对象代码是在本地存储和执行,还是在本地执行但在Internet 上分布,或者是在远程执行的。

●提供一个将软件部署和版本控制冲突最小化的代码执行环境。

●提供一个可提高代码(包括由未知的或不完全受信任的第三方创建的代码)执行安全性的代码执行环境。

●提供一个可消除脚本环境或解释环境的性能问题的代码执行环境。

●使开发人员的经验在面对类型大不相同的应用程序(如基于Windows 的应用程序和基于Web 的应用程序)时保持一致。

●按照工业标准生成所有通信,以确保基于.NET Framework 的代码可与任何其他代码集成。

.NET Framework 具有两个主要组件:公共语言运行库和.NET Framework 类库。公共语言运行库是.NET Framework 的基础。您可以将运行库看作一个在执行时管理代码的代理,它提供内存管理、线程管理和远程处理等核心服务,并且还强制实施严格的类型安全以及可提高安全性和可靠性的其他形式的代码准确性。事实上,代码管理的概念是运行库的基本原则。以运行库为目标的代码称为托管代码,而不以运行库为目标的代码称为非托管代码。.NET Framewo rk 的另一个主要组件是类库,它是一个综合性的面向对象的可重用类型集合,您可以使用它开发多种应用程序,这些应用程序包括传统的命令行或图形用户界面(GUI) 应用程序,也包括基于https://www.360docs.net/doc/d12319625.html, 所提供的最新创新的应用程序(如Web 窗体和XML Web Services)。

1.公共语言库

公共语言运行库是.NET Framework的基础。可以将运行库看作一个在执行时管理代码的代理,它提供内在管理、线程处理和远程处理等核心服务,并且还强制实施严格的类型安全以及可提高安全性和可行性的其他形式的代码准确性。

公共语言运行时提供了下列重要的服务:

●公共类型系统(Common Type System,CTS)定义了所有.NET语言的标准数据类型及其格式。例如,CTS定义了整型是32大小,还指定了整型值的内部格式。

●公共语言规范(Common Language Specification,CLS)定义了语言间互操作性的规定。由于CLS定义了规则,一个.NET语言创建的类就可以由其他.NET语言使用。

●当.NET应用程序第一次编译时,编译为一种可以由所有.NET语言共享的中间语言。在应用程序执行时,Just-Time(JIT)编译器把中间语言转换为可以在目标计算机上执行的可执行文件。

●CLS管理应用程序的执行,也就是说,CLR负责在创建和销毁对象时为其分配和解除分配内存。

●垃圾搜索器(Garbage Collector,GC)负责解除分配内存。

https://www.360docs.net/doc/d12319625.html, Framework类库

.NET Framework类库是一个与公共语言运行时紧密集成的可重用的类型集合,它是一个由Microsoft .NET Framework SDK中包含的类、接口和值类型组成的库。该库提供对系统功能的访问,是建立.NET Framework应用程序、组件和控件的基础。.NET Framework类库是面向对象

的,使用户能够完成一系列常见的编程任务,包括字符串管理、数据收集、数据库连接以及文件访问等。

同时,.NET Framework类库是面向对象的,可以使用它开发多种应用程序,这些应用程序包括传统的命令行或图形用户界面(GUI)应用程序,也包括基于https://www.360docs.net/doc/d12319625.html,所提供的最新创新的应用程序如WEB窗体和XML Web services。使用.NET Framework可开发下列类型的应用程序和服务:

●控制台应用程序.NET Framework控制台应用程序提供一个接口,与Windeows窗体和WEB窗体一样,这个控制台接口可以用于任何.NET语言编写的应用程序。

●Windews窗体应用程序WINDOWS窗体应用程序是显示标准Win32屏幕的一种高级的集成方式。. NET Framework上的所有语言都使用WINDOWS窗体引擎,该引擎为所有语言提供了一组丰富的、统一的控件和绘图函数,还为底层的WINDOWS服务的绘图提供了一个标准的API。

●https://www.360docs.net/doc/d12319625.html,应用程序https://www.360docs.net/doc/d12319625.html,是使开发人员能够使用.NET Framework开发基于WEB应用程序的宿主环境。但是,https://www.360docs.net/doc/d12319625.html,不止是一个运行库宿主,它还是使用托管代码开发网站和通过INTERNET分布的对象的完整结构。WEB窗体和XML WEB服务都将IIS和https://www.360docs.net/doc/d12319625.html,用作应用程序的发布机制,并且两者在.NET Framewor k中都支持类集合。

●XML WEB服务器XML Web服务由旨在供其他应用程序使用的可重用的软件组件组成,这些应用程序包括:传统的客户端应用程序,基于WEB的应用程序、甚至是其他XML Web服务。因此,XML Web服务技术正迅速地将应用程序开发和部署推向高度分布式internet环境。

●WEB窗体.NET中处理与internet通信的部分称为https://www.360docs.net/doc/d12319625.html,。它包含一个窗体引擎,叫做WEB窗体,用于创建基于浏览器的用户界面。WEB窗体把布局与逻辑分离开来,可分为两个部分:模板(包含基于HTML 的、用于所有用户界面元素的而已信息);组件(包含与用户界面相关的所有逻辑)。

11.1.2 CLR概述

公共语言运行库(CLR) 是Microsoft .NET Framework 的核心,为所有.NET Framework

代码提供执行环境。在CLR 中运行的代码称为托管代码。CLR 提供执行程序所需的各种函数和服务,包括实时(JIT) 编译、分配和管理内存、强制类型安全性、异常处理、线程管理和安全性。

通过在Microsoft SQL Server 中托管CLR(称为CLR 集成),可以在托管代码中编写存储过程、触发器、用户定义函数、用户定义类型和用户定义聚合函数。因为托管代码在执行之前会编译为本机代码,所以,在有些方案中可以大大提高性能。

托管代码使用代码访问安全性(CAS)、代码链接和应用程序域来阻止程序集执行某些操作。SQL Server 2005 使用CAS 帮助保证托管代码的安全,并避免操作系统或数据库服务器受到威胁。

1.启用CLR集成

默认情况下,Microsoft SQL Server中禁用公共语言运行库(CLR)集成功能,必须启用才能使用通过CLR集成实现的对象。要使用Transact-SQL启用CLR 集成,请使用如下所示的sp_confi gure存储过程的clr enabled选项:

停止执行所有CLR例程并卸载所有应用程序域。

2.部署CLR程序集

在测试服务器上测试和验证CLR方法后,可以使用部署脚本将其分发到生产服务器。部署脚本可以通过手动或使用SQL Server Management Studio 生成。

3.CLR集成安全性

Microsoft SQL Server 与Microsoft .NET Framework 公共语言运行库(CLR) 相集成,这种安全模型可管理和保护SQL Server 中运行的不同类型CLR 和非CLR 对象之间的访问。这些对象可以通过Transact-SQL 语句或服务器中运行的其他CLR 对象进行调用。

4.调试CLR 程序集

Microsoft SQL Server 支持调试数据库中的Transact-SQL 和公共语言运行库(CLR) 对象。跨语言调试工作:用户可以从Transact-SQL 无缝地进入并单步执行CLR 对象,反之亦然。

11.1.3 https://www.360docs.net/doc/d12319625.html,概述

https://www.360docs.net/doc/d12319625.html,提供对诸如SQL Server和XML这样的数据源以及通过OLE DB和ODBC公开的数据源的一致访问。共享数据的使用方应用程序可以使用https://www.360docs.net/doc/d12319625.html,连接到这些数据源,并可以检索、处理和更新其中包含的数据。

https://www.360docs.net/doc/d12319625.html,通过数据处理将数据访问分解为多个可以单独使用或一前一后使用的不连续组件。https://www.360docs.net/doc/d12319625.html,包含用于连接到数据库、执行命令和检索结果的.NET Framework数据提供程序。这些结果或者被直接处理,放在https://www.360docs.net/doc/d12319625.html, DataSet对象中以便以特别的方式向用户公开,并与来自多个源的数据组合或者在层之间传递。DataSet对象也可以独立于.NET Framework数据提供程序,用于管理应用程序本地的数据或源自XML的数据。

https://www.360docs.net/doc/d12319625.html,类位于System.Data.dll中,并与System.Xml.dll中的XML类集成。有关连接到数据库,从数据库检索数据,然后在控制台窗口中显示该数据的示例代码。

https://www.360docs.net/doc/d12319625.html,向编写托管代码的开发人员提供类似于ActiveX数据对象(ADO)向本机组件对象模型(COM)开发人员提供的功能。建议您在.NET应用程序中使用https://www.360docs.net/doc/d12319625.html,而不使用ADO来访问数据。

1.https://www.360docs.net/doc/d12319625.html, 结构

以前,数据处理主要依赖于基于连接的双层模型。随着数据处理越来越多地使用多层体系结构,程序员正在向断开方法转换,以便为他们的应用程序提供更好的可伸缩性。

https://www.360docs.net/doc/d12319625.html, 组件

https://www.360docs.net/doc/d12319625.html, 3.0 用于访问和操作数据的两个主要组件是.NET Framework数据提供程序和Dat aSet。

NET Framework数据提供程序:.NET Framework数据提供程序是专门为数据操作以及快速、只进、只读访问数据而设计的组件。Connection对象提供到数据源的连接。使用Command 对象可以访问用于返回数据、修改数据、运行存储过程以及发送或检索参数信息的数据库命令。DataReader可从数据源提供高性能的数据流。最后,DataAdapter在DataSet对象和数据源之间起到桥梁作用。DataAdapter使用Command对象在数据源中执行SQL命令以DataSet中加载数据,并将对DataSet中数据的更改协调回数据源。

DataSet:https://www.360docs.net/doc/d12319625.html, DataSet是专门为独立于任何数据源的数据访问而设计的。因此,它可以用于多种不同的数据源,用于XML数据,或用于管理应用程序本地的数据。DataSet包含一个或多个DataTable 对象的集合,这些对象由数据行和数据列以及有关DataTable对象中数据的主键、外键、约束和关系信息组成。

●LINQ to DataSet LINQ to DataSet提供对在DataSet对象中缓存的数据的查询功能和编译时类型检查。它使您可以使用一种.NET Framework开发语言(例如C# 或Visual Basic)来编写查询。

●LINQ to SQL LINQ to SQL支持查询无需使用中间概念模型即可映射到关系数据库数据结构的对象模型。每个表均由独立的类表示,从而使对象模型与关系数据库架构紧密地耦合在一起。LINQ to SQL可将对象模型中的语言集成查询转换为Transact-SQL并将其发送到数据库以便执行。当数据库返回结果时,LINQ to S QL将结果转换回对象。

●https://www.360docs.net/doc/d12319625.html,实体框架https://www.360docs.net/doc/d12319625.html, 实体框架专门用于让开发人员能够通过针对概念性应用程序模型进行编程(而不是直接针对关系存储架构进行编程)来创建数据访问应用程序。这样做的目的是减少面向数据的应用程序所需的编码和维护工作。

●https://www.360docs.net/doc/d12319625.html,数据服务https://www.360docs.net/doc/d12319625.html, 数据服务框架用于在Web 或Intranet 上部署数据服务。这些数据将按照实体数据模型的规范组织成不同的实体和关系。在此模型上部署的数据可通过标准的HTTP 协议进行寻址。

●XML和https://www.360docs.net/doc/d12319625.html, https://www.360docs.net/doc/d12319625.html, 利用XML 的功能来提供对数据的断开连接的访问。https://www.360docs.net/doc/d12319625.html, 是与.NE T Framework 中的XML 类并进设计的,它们都是同一个体系结构的组件。https://www.360docs.net/doc/d12319625.html, 和.NET Framework 中的XML 类集中于DataSet 对象中。无论XML 源是文件还是XML 流,都可以用其中的数据来填充DataSet。无论DataSet 中数据的源是什么,都可以将DataSet 作为符合万维网联合会(W3C) 的XML 进行编写,其架构作为XML 架构定义语言(XSD) 架构。由于DataSet 的本机序列化格式为XML,因此它是用于在层间移动数据的绝佳媒介,这使DataSet 成为了与XML Web 服务之间远程处理数据和架构上下文的最佳选择。2.https://www.360docs.net/doc/d12319625.html, 技术选项和指南

https://www.360docs.net/doc/d12319625.html, 数据平台是一种多版本策略,通过使开发人员能够针对概念性实体数据模型编程,从而减少其所需的编码和维护工作量。此平台包括https://www.360docs.net/doc/d12319625.html, 实体框架和相关技术。

●实体框架https://www.360docs.net/doc/d12319625.html,实体框架专门用于让开发人员能够通过针对概念性应用程序模型进行编程(而不是直接针对关系存储架构进行编程)来创建数据访问应用程序。这样做的目的是减少面向数据的应用程序所需的编码和维护工作。

●实体数据模型(EDM) 实体数据模型(EDM) 是一种将应用程序数据定义为多组实体和关系的设计规范。此模型中的数据支持跨应用程序边界的数据关系映射和数据可编程性。

●对象服务对象服务允许程序员通过一组公共语言运行库(CLR)类与概念模型进行交互。这些类既可以从概念模型自动生成,也可以单独开发以反映概念模型的结构。对象服务还为实体框架提供基础结构支持,包括状态管理、更改跟踪、标识解析、加载和导航关系、将对象更改传播到数据库修改和实体SQL查询生成支持等服务。

●LINQ to Entities 是一种语言集成查询(LINQ)实现,它允许开发人员通过使用LINQ表达式和LINQ标准查询运算符,根据实体框架对象上下文创建强类型查询。LINQ to Entities使开发人员能够针对一个概念模型开展工作,在此模型中,可在Microsoft SQL Server和第三方数据库之间非常灵活地进行对象关系映射。

●实体SQL 实体SQL 是一种基于文本的查询语言,专门用于与实体数据模型进行交互。实体SQL 是一种SQL 变体,其中包含针对更高级别的建模概念的查询构造,例如继承、复杂类型和显式关系。

●EntityClient 是一种用于与实体数据模型交互的新的.NET Framework数据提供程序。EntityClient遵循.NET Framework数据提供程序模式,公开可返回EntityDataReader的EntityConnection对象和EntityCommand 对象。EntityClient与实体SQL语言一起使用,可提供与特定于存储的数据提供程序的灵活映射。

●https://www.360docs.net/doc/d12319625.html, 数据服务https://www.360docs.net/doc/d12319625.html, 数据服务框架用于在Web 或Intranet 上部署数据服务。这些数据将按照实体数据模型的规范组织成不同的实体和关系。在此模型上部署的数据可通过标准的HTTP 协议进行寻址。

●实体数据模型工具实体框架提供了命令行工具、向导和设计器来帮助生成EDM 应用程序。Entity DataSource控件支持基于EDM的数据绑定方案。EntityDataSource控件的编程接口与Visual Studio中的其他数据源控件类似。

11.2 创建.NET程序

由于.NET程序来返回给SQL Server 2008结合得非常紧密,在很多软件开发或WEB开发中都使用.NET平台创建应用程序操作数据库。本节将详细介绍在.NET平台下如何创建SQL SERVE R项目及创建用户自定义内容,以提供给SQL SERVER 2008使用。

11.2.1 创建SQL SERVER项目

如果需要创建.NET程序来返回给SQL SERVER,就需要用到Visual https://www.360docs.net/doc/d12319625.html, 2008来创建相应的SQL SERVER项目,在相应的项目中添加各种自定义函数、存储过程及触发器等内容。本节将详细介绍SQL SERVER项目的创建过程及其注意事项。

首先,打开Visual https://www.360docs.net/doc/d12319625.html, 2008,选择【文件】|【新建】|【项目】命令,此时系统弹出【新建项目】对话框,如图11-1所示:

图11-1 【新建项目】对话框

在该对话框中,用户需要在项目类型区域中选择【数据库】并在右侧的模式区域中选择【S QL SERVER项目】。用户可以在【名称】文本框中输入相应名称,这里输入First Fun在【位置】文本框中可以选择创建项目的保存位置。确认输入后单击【确定】按钮,之后系统会弹出【添加数据库引用】对话框,如图11-2所示。

图11-2 新建数据库引用

图11-2所示为新建数据库引用,在【服务器名】下拉列表框中选择服务器名称,如果存在密码就启用相应的登录项输入用户名及密码;然后启用【选择或输入一个数据库名】单选框,并在其下拉列表框中选择需要用到的数据库。另外,用户还可以启用【附加一个数据库文件】来附加相应的数据库,这里选择了“BookDateBase”数据库。

如果用户想要知道,是否能够与数据库连接成功,那么可以单击图11-2中的【测试连接】按钮,如果成功则弹出对话框提示成功信息,如图11-3所示。

图11-3 测试连接图11-4 资源管理器

接下来单击【确定】按钮完成对SQL SERVER项目的创建,完整的项目可在【解决方案资源管理器】中看到,如图11-4所示。

在【解决方案资源管理器】中可以看到一个名为Test Scripts的文件形式的项目,用户可以通过它来创建相应的内容。在该项目中右击鼠标,在弹出的快捷菜单中选择【添加】,其二级菜单中可以看到诸如【用户自定义的函数】、【存储过程】以及【触发器】等项目,如图11-5所示。

图11-5 快捷菜单

到此,用户就完成了一个SQL SERVER项目的创建。接下来就可以通过快捷菜单创建相应的内容,下面的内容将为读者详细介绍。

11.2.2 用户自定义函数

用户可以在.NET平台中使用各种语言创建用户自定义函数,并在SQL Server 2008中使用,用户可以像调用T-SQL一样调用这些自定义函数。同时,自定义函数也给用户很大的自由编码空间,用户自定义函数时有如下三种可定义的方式。

●标量值用户自定义函数这种类型的自定义函数返回单个值,如整形、字符串等;

●表值用户自定义函数这种类型的自定义返回整个表。

●自定义聚合函数这类函数类似于SUM或MAX之类的函数。

在平时使用中自定义聚合函数的几率很小,下面以标量值用户自定义函数以及表值用户自定义函数为例,详细讲解它们的使用方法。

1.标量值用户自定义函数

标量值函数表示该函数的返回类型为单值,如返回一个字符串,一个浮点型或一个整型等。这种函数通常有0个或多个输入,它们通常以静态类方法实现,因此不必创建类的实例即可调用这些方法,下面来介绍这类函数的创建及编写方法。

首先如图11-5所示的快捷菜单中选择【用户自定义函数】,此时系统弹出【添加选项】对话框,如图11-6所示。

图11-6 添加新项

在图11-6所示的对话框中选择【用户自定义函数】,并在【名称】文本框中添加名称,这里将其命名为ShowHello.cs,然后单击【添加】按钮。之后在Visual https://www.360docs.net/doc/d12319625.html, 2008中显示所创建的内容,如图11-7所示。

图11-7 创建用户自定义函数

图11-7中显示了代码编写区和【解决方案资源管理器】对话框,其中用户可以在代码编写区编写相应代码,默认情况下有一个返回值为SqlString的ShowHello方法;而在【解决方案资源管理器】对话框中显示了已经存在的文件。将代码编写区域代码更改为如形式:

添加语句,它告诉系统下面定义的函数为SQL SERVER可用函数,如果没有语句则SQL SERVER 无法识别函数。

代码中定义了一个静态类型返回值为SqlString的函数ShowHello,那么函数编写完毕后如何使用它呢?这里定义的方法适用于多种情况,首先用户可以在【解决方案资源管理器】对话框中找到名为Test.sql的文件,双击打开该文件,进入该文件的代码编写界面。

由于前面在创建SQL SERVER项目时,指定了相应的数据库,因此用户可以在这里随便使用SQL语句,执行这些语句的范围就在用户指定的数据库中。例如在Test.sql中写入下面的语句:

图11-8 查询数据库

从图11-8可以知道,本项目FirstFun作用范围为用户指定的数据库,因此同样可以在该数据库中使用自定义方法。例如在Test.sql文件中输入下面的内容。

同,这里的显示不是以表格形式出现,而是返回结果列名为“第一列”,其中列中内容为自定义函数返回的结果。

图11-9 使用自定义函数

除了在Test.sql文件中使用自定义函数外,还可以在SQL SERVER 2008中使用。打开SQL SERVER 2008,新建查询,并写入与Test.sql中相同的内容,执行后可以得到如图11-10所示。的内容。

11-10 执行结果

在图11-10中可以看到SQL SERVER 2008中以表格形式出现,此时用户还可以再添加新的自定义方法,例如在原有代码中添加如下内容:

11-11 添加代码后显示结果

使用T-SQL语句同样可以实现上述功能,但使用.NET平台则可以完成更多复杂的且SQL SE RVER中无法完成的功能。比如在事件日志、WMI、性能计数器、高级.NET类或复杂的数学计算等方面使用T-SQL会比较困难,但使用.NET便能轻松解决。

2.表值用户自定义函数

与标量值用户自定义函数不同,表值用户自定义函数返回值为整个表。在.NET平台中创建表值函数时,必须实现Ienumerable接口,该接口具有极大的灵活性,用户可以使用它返回任何内容给SQL SERVER。在使用表值函数时涉及到复杂的编程知识,但其原理与标量值用户自定义函数基本相同,这里不在赘述。

11.2.3 存储过程

前面章节曾经详细介绍了存储过程及其创建方式,在.NET平台中同样可以创建用户自定义存储过程,接受或返回用户提供的参数,并在SQL SERVER中使用。在.NET平台中创建用户自定义存储过程与用户自定义函数相同,都需要将它们发布在程序集中以供SQL SERVER使用,而存储过程具有以下几个较高级的功能:

●CLR存储过程可以有一个返回值。

●CLR存储过程可以有输出参数。

●CLR存储过程可以返回消息给客户程序。

●CLR存储过程可以调用数据定义语言(DDL)和数据操纵语言(DML)语句。

创建用户自定义存储过程与用户自定义函数基本相同,都需要创建一个SQL项目,然后右击项目的Test Scripts并在弹出的快捷菜单中选择【添加】|【存储过程】,此时系统弹出如图1 1-12所示的对话框。

图11-12 创建存储过程

在该对话框中选择【存储过程】并在【名称】文本框中添加存储过程名称,这里填写了my ST,最后单击【添加】按钮。创建好的存储过程如图11-13所示。

11-13 创建好后的存储过程

存储过程在.NET Framework程序集中作为类的公共静态方法实现,默认情况下创建一个无返回值的静态方法,用户便可以在代码编辑区编写相应的内容,例如下面代码为一个简单的用户自定义存储过程。

储过程。代码编写完毕后,编译代码,然后打开SQL SERVER 2008新建查询,在查询中写入如下容:

图11-14 使用用户自定义存储过程

11.2.4 触发器

触发器也可以由.NET平台创建,触发器用不带返回类型的静态函数表示。.NET平台的公共语言运行时既支持数据操纵语言(DML)触发器又支持数据定义语言触发器(DDL)。在创建触发器时可以使用SqlTriggerContext的特殊类来获得INSERTEDT DELETED表,确定哪些列在UPDA TE语句中被修改或者获取与激活了触发器的DDL操作有关的详细信息。

为某个数据库创建触发器的方法也非常简单,首先需要创建一个SQL SERVER项目,并在创建项目过程中指定数据库。创建完成后,在图11-5所示的快捷菜单中选择【触发器】,并在随后出现的图11-6对话框中选择相应【触发器】项,并在【名称】文本框中添加相应名称,之后单击【添加】按钮即可,此时可以看到如图11-15所示的内容:

11-15 创建触发器

创建一个名为Trigger_one的触发器,响应一个UPDATE操作:

以添加如Name,Target和Event属性值。代码中SqlTriggerContext类不能被公开构造,而只能通过访问CLR触发器主体内的TriggerContext属性获取,也可以通过调用TriggerContext属性,从活动SqlContext中获取SqlTriggerContext类。该类的作用是提供有关触发器的上下文信息,这些信息包括引发触发器的操作、UPDATE操作中修改的列以及针对DDL触发器的XML EventDat a结构。

代码中使用TriggerAction属性来获取导致引发触发器的操作类型,对于DML触发器,Trigg erAction属性可以是以下值之一:

●TriggerAction.Update

●TriggerAction.Insert

●TriggerAction.Delete

由于上面代码为响应一个UPDATE操作的触发器,那么打开SQL SERVER 2008并新建查询,输入下面的语句:

图11-16 执行结果

从执行结果中可以看到,使用了INSERT语句后,结果中显示了“Books”表的全部内容,新修改到表中的内容可以在该结果中看到,且由此可知触发器发挥了作用。上述语句中有两条重要内容,需要做出特别说明:

how advanced options设置为1时才能更改CLR enabled。

第二行clr_enabled表示SQL SERVER是否可运行用户程序集,如果clr_enabled值为0时则不允许执行SQL SERVER 2008上的执行程序集,如果为1时则允许执行程序集,因此这两句至关重要,用户在编写语句时一定要注意。

11.2.5 创建用户定义类型

用户定义类型(UDT)是SQL SERVER 2008的新特性,使用它可以创建SQL SERVER 2008中所没有的数据类型,如得数类型。SQL SERVER 2008增加的对用户定义类型的支持,使用户可以通过使用.NET平台创建用户定义类型,不仅可以定义复杂的结构化类型,还可以存储在数据库中扩充数据库的类型系统。

与之前介绍的用户自定义函数、自定义存储过程或触发器知识相比较,用户定义类型较为复杂,但从应用程序结构的角度来说,UDT具有两个重要的优点:

●在内部状态和外部行为之间有强大的封装(无论在客户端中还是在服务器中)。

●与其他相关服务器功能的深度集成。定义了自己的UTD后,就可以在所有可使用SQL SERVER 2008中的系统类型(包括列定义)的上下文中使用,并且可以作为变量、参数、函数结果、游标、触发器和复制使用。

创建用户定义类型的方法也非常简单,需要通过SQL项目,只需要在如图11-5所示的快捷菜单中选择【用户定义的类型】即可,其他操作与前面的创建方式相同,这里不再赘述,创建好的内容如图11-17所示。

图11-17 创建用户定义类型

当用户创建了一个类型后,系统会给出用户定义类型代码的基本框架,用户可以根据框架添加需要的内容。本节创建了一个名为my_Type的类型,它实现一种类型代码如下所示:

它们进行了解。完成上述代码后,对它们进行编译,接下来打开SQL SERVER 2008使用自定义类型,新建查询输入下面的语句:

如图11-18所示。

图11-18 执行结果

11.3 数据访问概述

.NET Framework或SQL SERVER 2008结合紧密,这样用户便可以使用.NET平台通过编程连接SQL SERVER数据库,从而实现各种应用软件的开发。在使用.NET访问SQL SERVER时需要引用一些命名空间,而.NET提供的https://www.360docs.net/doc/d12319625.html, 2.0又能方便用户连接数据库的操作,本节就详细介绍命名空间和https://www.360docs.net/doc/d12319625.html,的相关知识。

11.3.1 System.Data.SqlClient命名空间

SqlClient提供程序是完全为访问SQL SERVER数据库而设计的,该命名构成SQL https://www.360docs.net/doc/d12319625.html, Framework数据提供程序的类,提供程序允许连接到SQL Server 2008执行命名并读取结果。

该命名空间中有4个重要的类,这4个类分别是:SqlConnection,SqlCommand,SqlDataRead er和SqlDataAdaper。这4个类和DataSet类能够对SQL SERVER数据库执行任何操作。

要连接数据库必须创建SqlConnection对象,使用该对象的Open方法可以连接SQL SERVE R 2008数据库,使用Close方法可以关闭连接。常用的对象属性有ConnectionString,用于设置连接字符串。

SqlCommand表示连接到数据源时执行的SQL语句,由访问关系数据库的.NET Framework 数据提供的程序实现。SqlCommand对象常用属性有:CommandText,CommandTimeout,Connecti on等,其中CommandText用于设置SQL语句。

SqlDataReader用于数据库返回产生只读、只进的数据流。使用SqlDataReader能够使用较少的服务器资源且快速地返回数据,常用的方法有Read,Open以及Close等。

SqlDataAdaper用于检索和更新数据,并可以填充DataSet对象,通过DataSet对象还可以更新数据库,它是DataSet对象和数据库之间关联的桥梁。SqlDataReader对象通过打开一个连接来检索数据库的信息,然后执行SQL语句,再搜索所要检索的记录,当不再有操作时关闭连接;再DataAdaper对象仅仅在需要填充DataSet对象时才使用数据库连接,在完成操作后将释放所有服务器资源。SqlDataAdaper的重要方法很多,其中UPDATE方法便可以更新数据库。

11.3.2 https://www.360docs.net/doc/d12319625.html,2.0

https://www.360docs.net/doc/d12319625.html, 2.0的设计专门优化了使用SqlClient访问数据的过程,并使用https://www.360docs.net/doc/d12319625.html,对象实现其数据处理。https://www.360docs.net/doc/d12319625.html,中提供了多种对象,如Connection,Command,Dataset,DataReader,D ataAdaper以及DataView等,具体到某种数据库的连接方式或命名空间中又有不同的表示。1.https://www.360docs.net/doc/d12319625.html, 2.0数据库命名空间

在.NET平台中下是https://www.360docs.net/doc/d12319625.html, 2.0提供了众多数据源的连接方式,前面介绍的System.Data.S qlClient就是https://www.360docs.net/doc/d12319625.html, 2.0提供的命名空间,它只是提供操作SQL SERVER的各种对象。常用的数据源还包含如Microsoft Access,Oracle,以及一些其他第三方数据源等,https://www.360docs.net/doc/d12319625.html, 2.0还提供了如下几种命名空间以满足不同用户的需求:

●System.Data System.Data命名空间是https://www.360docs.net/doc/d12319625.html,技术的核心,它提供https://www.360docs.net/doc/d12319625.html,编程模型内的数据访问的基本功能。https://www.360docs.net/doc/d12319625.html,的主要对象DataSet便位于该命名空间中。

●System.Data.OleDb 该命名空间构成兼容数据源的OLE https://www.360docs.net/doc/d12319625.html, Framework数据提供程序的类,使用该命名空间可以操作Microsoft Access以及Oracle数据库,它提供了与System.Data.SqlClient相同的类。

●System.Data.Odbc 如果用户使用的数据源没有自己的或OLEDB提供者,如PostgrsSQL或其他一些第三方数据源,此时就可以使用该命名空间下的各种类操作数据库,该命名空间下各种类与OLEDB基本相同。2.使用SqlConnection对象

相关主题
相关文档
最新文档