SQL Server 2005中的CLR集成(3)
作者:静水流深 来源:IT168 发布时间:2009-03-10 15:07:00
以下为引用的内容:
Enter Category ID:
正如这个示例所示,调用CLR存储过程与调用T-SQL存储过程没有任何不同。二者都按照相同的步骤,而没有任何改变。结果应该显示Production.Product表中Name和ProductNumber列的所有记录。在这个示例中,返回了Name和ProductNumber列的所有行,因为查询没有为返回单个行而设置特定ProductID。因此,返回所有行。
4.2 SQL Server中的T-SQL和受管代码
一种很吸引人的想法是认为,开发人员能够避免编写业务层,而在SQL Server中使用受管代码编写所有代码。然而,重要的是记住SQLCLR不是用于代替业务层。因此,正由于能够在SQL Server中编写C#或者VB.NET代码,所以不希望将SQL Server作为托管所有.NET代码的应用程序服务器。SQLCLR是专用于在SQL Server中实现特定目的,而此时T-SQL可能不是正确的选择。
注意,开发人员应该将SQLCLR作为一种无法使用T-SQL显式表达逻辑的备选解决方案——也不能作为实现业务层逻辑的替代品。那么根据这个规则,开发人员应该首先使用T-SQL解决问题。
T-SQL比较适合基于集合的操作,例如表格式数据,SQLCLR比较适合实现过程性代码和递归操作。然而,真正是否更加适合取决于多种因素。通过以下三条规则可很好的比较总结T-SQL和SQLCLR:(1)基于集合的操作最好使用T-SQL。(2)使用程序性和递归代码最好使用SQLCLR。(3)存在多个有关因素可能影响以上两条规则,例如编译CLR代码和解释性的T-SQL代码,在SQL Server中加载时的开销,过程中所需的数据访问,辅助函数库等等。这种情况由存在多种原因造成,其中多数由于数据库内部的CLR与Windows计算机中的CLR受到了不同的约束限制。Windows计算机中的CLR由操作系统来运行,其与SQL Server中运行的同一CLR不同。主要的不同点是SQL Server所担负的责任,管理线程调用,同步,锁定和内存位置等方面。
Windows计算机中的CLR和SQL Server中的CLR之间的另一个重要不同是,用于加载CLR的引导机制。SQL Server 2005除非在需要的情况下,否则不会加载CLR。这是因为SQL Server遵循了保护内存,尽量加载任何所需资源的规则。根据除非需要,否则不加载CLR的原则,可节约CLR本来要占据的数兆字节内存空间。因此,如果有少量使用CLR的代码片段,同时加载CLR,那么由此可能会影响特定计算机的其他操作。
将这样的责任都委托给宿主(SQL Server)反而会带来有趣的挑战。就本质而言,这意味着运行在SQL Server内部的个别操作此时可能被认为具有一定欺诈性,是一个潜在的安全线程,或者可能降低服务器安全性。因此,当自由使用CLR及其各种操作时,则变得有些危险,那么SQL Server应用程序则以一定方式正确的自己实现,即个别应用程序不应该以任何方式忽略或者暗中损害服务器。
通过对SQL Server内部能够执行的.NET代码操作集合的粒度控制能够强制SQL Server实现以上内容。这种机制构建于代码访问安全(Code Access Security,缩写为CAS)之上,它是CLR的一部分。微软开发人员要花费长时间艰难的查看.NET Framework中的每个类,将它们分为三种类别(SAFE,EXTERNAL_ACCESS和UNSAFE),这些类别在上面的内容中已经介绍了。换言之,开发人员需要告诉SQL Server,根据所设置操作,代码将按照三种类别之一执行。如果代码试图进行一些初始化设置之外的事情,那么SQL Server会阻止其执行。
小结
本文重点对SQL Server 2005中的CLR集成功能进行了讲解。这的确是一种非常吸引开发人员的功能,能够大幅提高开发效率,减低应用程序的维护修改强度。希望开发人员能够熟练的使用这项功能。
猜你喜欢
- 昨天在写“同IP站点查询”工具的时候,需要先用ASP获取查询域名的IP,本来是用WSHSHELL组件,代码如下:<%@LANGUAGE
- 桥接模式Bridge Pattern是什么桥接模式是一种结构型模式,它将抽象部分与实现部分分离开来,使它们可以独立地变化。在桥接模式中,我们
- 使用MySQL的命令终端时,如果输入SQL有误,将有beep声。若要关闭该功能,根据mysql --help,使用mysql --no-be
- 下面是一份在 HTML 4 Strict 和 XHTML 1.0 Strict 下必须遵守的标签嵌套规则,比如你不能在 <a>
- 今天,使用各种所见即所得工具制作主页已经是一件非常容易的事情了。但是了解HTML源代码和语法,无疑对我们制作主页有更大的帮助,也可以使用户能
- 指定的代码页特性无效。 codepage属性:是指出网页的代码页 如果制作的网页脚本与WEB服务端的默认代码页不同,则必须指明代码页: 代码
- 在给客户做个程序时,突然遇到个问题,就是产品页用户提交视频播放文件时,如何根据提交的网址内的视频格式进行正确的播放呢....郁闷了一会,想好
- 今天把Ext.js源码又读了一遍,不过这次比较认真。看完代码,有了不少收获也遇到不少问题。主要总结如下:1、document.execCom
- 当鼠标滑过一个图片时,图片会变成另外一张图片的效果是怎么制作出来的呢?相对一些不熟悉HTML代码的朋友来说,可以使用网页编辑软件自带的动作来
- 对url进行编码在服务器端我们可以使用asp中的server.urlencode,很方便实现。如:<% ss="asp之家欢
- 1、MySQL常用命令create database name; 创建数据库use databasename; 选择数据库drop data
- 大家都知道,在SQL脚本中设置多字段做关键字相对比较简单,例:primary key(id1,id2) ,但用脚本建数据库就比较麻烦了。那么
- 用户界面和用户体验(UI/UX)是任何产品成败的关键,尤其 Web,Web 是一种公开的,可以被任何人随时随地访问的特殊产品,用户的体验几乎
- 【原文地址】New "Orcas" Language Feature: Extension Methods【原文发表日期
- 在国外一博客看到的技巧,终于解决IE的这个老大难问题。我在IE的setAttribute bug也提到其解决方法,一是innerHTML,一
- 网上有很多提供在线按钮制作、文字标题制作、Logo制作服务的网站,它们可以非常方便了让大家轻松的获得效果出色的各类图标型的图片,下面就快来看
- 本书的作者Douglas Crockford是JavaScript开发社区最知名的权威,JavaScript的发明人Brendan Eich
- 好了,下面我们看看如何在服务器上生成.m3u文件并下传到客户端的:<%dim choose,path,mydb,myset,
- CREATE OR REPLACE PROCEDURE PROC6338196642095312503719(输入新闻主题 Varchar2
- 自己前端开发中常用到的一些技巧及问题解决方法,会常更新,希望对前端路上的朋友有帮助。1、文章标题列表中日期居右显示的方法(提供了两种方法,使