通过CLR同步SQL Server和Sharepoint List数据(一)

写于前方

    本系列文章共分成四片段:

        1. CLR概述。

        2. 当Visual Studio中开展CLR集成编程并配备及SQL
Server,包括仓储过程、触发器、自定义函数、自定义类型及汇。

        3. CLR集成编程的调节以及所遇到的问题。

        4. 行使CLR同步SQL Server表和Sharepoint
List(来源于实际项目用)。

    本系列文章建立于以下软件条件的根基及:

  • Windows Server 2003 Enterprise Edition Service Pack 2
  • Microsoft Visual Studio Team System 2008
  • Microsoft SQL Server 2008
  • Microsoft Office Sharepoint Server 2007

 

前言

    CLR(Common Language
Runtime)公共语言运行时是Microsoft在.NET出来以后创立出的一个概念,它是.NET架构中根本的片,为所有.NET
Framework代码提供执行环境。在CLR中运作的代码称为托管代码。CLR提供履顺序所急需的各种函数和服务,包括实时(JIT)编译、分配和管制内存、强制类型安全、异常处理、线程管理暨安全性等。相信读者就当其余一样本介绍.NET的写中针对它进行了询问,并且深知CLR的办事规律。本文要介绍的不仅仅是.NET架构中的CLR,更多之虽是关于CLR的并编程。事实上,Microsoft在集体语言运行时(CLR)集成编程上曾召开了不少备了,以至于用户现在得以用.NET的旁一样栽语言将好编写好的作用安插在微软的其它一样舒缓产品达到(可能略夸大了),例如SQL
Server、Office产品相当,本文正是针对CLR在SQL
Server上的用进行介绍。有关CLR在其它产品上的动,我将以外系列文章被重新举行牵线(如VSTO等)。

    从SQL Server
2005起来,Microsoft就曾以里头并了公私语言运行时(CLR)组件,只不过当时的用或还非极端常见(也许我当下还连不曾怎么听说),使用的用户不多。但是,这也就算表示用户已得以使用.NET的另一样栽语言(如VB.NET和C#.NET等)来吧数据库编写存储过程、触发器、用户定义类型、用户定义函数、用户定义聚合和流式表函数等等数据库对象了。这个信息听起真让丁很提神,这为那些许多年来还老封建的DBA、DEV(数据库开发人员)们发了再也多之挑选,同时为于洋洋不过的SDE(软件开发人员)可以尝试数据库开发,从而给程序及后台的数据库结合得更加严密,开发人员之间的协作更加顺风。

 

国有语言运行时(CLR)集成概述

    Microsoft SQL Server已经具备了与.NET
Framework的公家语言运行时(CLR)组件集成的成效。CLR也托管代码提供劳务,例如跨语言集成、代码访问安全性、对象生存期管理以及调节和分析支持,它装有以下部分风味:

  • 还好之编程模型。.NET Framework语言在广大上面都比较
    Transact-SQL丰富,它吧SQL
    Server开发人员提供了原先尚未底布局和效益。开发人员还可应用 .NET
    Framework 库的力量,它提供了大量可用于快速有效地化解编程问题之好像。
  • 改良了安和安全性。托管代码在数据库引擎承载的国有语言运行时环境遭到运行。SQL
    Server利用这同特点啊于 SQL Server
    早期版本被提供的扩大存储过程提供再安全又牢靠的代方式。
  • 会定义数据类型和聚合函数
    用户定义类型和用户定义聚合是个别独新的托管数据库对象,这简单单对象扩大了SQL
    Server的仓储和查询功能。
  • 经过规范环境简化了支付。数据库开发并及前本的Microsoft
    Visual Studio
    .NET开发环境中。开发人员在开发及调节数据库对象及本子时所动的工具和他们编中间层或客户端层的
    .NET Framework组件和劳务经常所使用的家伙相同。
  • 享有改善性及而扩展性的潜力。在大部情景下,.NET
    Framework语言编译和实践模型通过Transact-SQL提高性能。

    托管代码应用代码访问安全性(CAS)来如程序集无法推行某些操作。SQL
Server使用CAS来协助保护托管代码,并阻碍针对操作系统或数据库服务器的损伤。

CLR集成的长

   
Transact-SQL是为当数据库中一直进行数据访问与决定而特意计划的。虽然Transact-SQL在多少看与管理方面表现大好,但其不是完全的编程语言。例如,Transact-SQL不支持数组、集合、for-each循环、移位或类。虽然可以Transact-SQL中模仿某些这样的结构,但托管代码都集成了针对性这些构造的支撑。根据具体情况,这些效应足以为在托管代码中落实某些数据库功能提供充分理由。

挑Transact-SQL还是托管代码

   
如果代码主要实施没有要只是出非常少过程逻辑的数看,请动Transact-SQL。如果要编有千丝万缕逻辑又CPU占用量十分之函数和经过,或者想使用.NET
Framework的BCL,则动用托管代码。

分选于服务器被实行或者当客户端着履行

   
影响下Transact-SQL还是托管代码的另一个素是你想以代码驻留于服务器计算机上,还是当客户端计算机及。Transact-SQL和托管代码都可以于服务器上运行。这种方式可拿代码和数量近放在一块儿,并允许你运服务器的精处理能力。另一方面,您可能要避免用微机占量大之职责在数据库服务器上。目前多数客户端计算机都发坏强大的力量,因此而可能要经过以尽心多的代码放在客户端上,来使用这种拍卖能力。托管代码可以当客户端计算机达运行,而Transact-SQL不克。

选取扩展存储过程或者托管代码

   
可以变更扩展存储过程来实行下Transact-SQL存储过程无法落实之力量。但是,扩展存储过程或者产生重伤于SQL
Server进程的完整性,而由此证实确定为品种安全的托管代码则无会见。进一步来说,在CLR的托管代码和SQL
Server之间更深入地拼了内存管理、线程及纤程的调度和共同服务。如果所编写的贮存过程用实践于Transact-SQL中莫可能好的任务,则CLR集成有比较扩展存储过程又安全的不二法门来促成其。

 

公共语言运行时(CLR)集成性能

    现在开发人员可以自由选择Transact-SQL或者CLR进行SQL
Server数据库开发,但是两岸在性质方面各有利害,针对被不同品类的演算和数据库对象,下表给起了两者之间的界别。

类型

Transact_SQL

CLR

用户定义函数 执行数据访问时更有效。 适用于过程代码、计算和字符串操作以及需要大量计算和不执行数据访问的部分。
用户定义聚合 非基于游标的本机内置聚合函数的性能高于CLR方式。 性能高于基于游标的聚合,但执行速度较慢。
流式表值函数(TVF函数)

托管TVF的性能优于可比扩展存储过程实现的性能,它返回IEnumerable接口的托管函数。
数组与游标 游标的性能低于CLR中的数组 当Transact-SQL游标必须遍历更容易表示为数组的数据时,使用托管代码可以显著提高性能。
字符串数据 char或varchar数据类型。 托管函数中可以是SqlString或 SqlChars类型。
扩展存储过程 无法查看或控制扩展存储过程的资源使用情况。 可以使用托管代码对给定的线程进行检测。

 

国有语言运行时(CLR)集成安全性

    与.NET Framework公共语言运行时 (CLR) 集成的SQL
Server的安康模式用于管理和保安SQL
Server内运行的不比品类CLR对象与非CLR对象之间的顾。这些目标或是因为Transact-SQL语句或服务器上运行的外CLR对象调用。对象期间的调用称为链接。对这些目标实施之安检查项目取决于相关的链接类型。CLR集成安全模式可实现以下目的:

  • 默认情况下,在SQL Server中运行托管用户代码不该损害SQL
    Server的完整性和安静。如果执行有或挫伤 SQL
    Server可靠性的操作,则应当吃适当的高档权限的掩护。
  • 托管用户代码不应当得到对数据库中用户数据要其他用户代码的未经授权访问。用户定义代码应当以调用该代码的用户会话的安康上下文中运行,且具有该安全达成下文的正确特权。
  • 应当有支配来界定用户代码不得访问服务器以外的任何资源,而只能用于地方数据看同计量。
  • 用户定义代码不答应能通过当SQL
    Server进程中运作而获取对系统资源的未经授权访问。

    SQL Server已经集成了SQL
Server基于用户之安康模式和CLR基于代码访问的平安模式。SQL
Server主机策略级别与程序集的代码访问安全性权限集由创建该次集时指定的权柄集决定。有三独权力集:SAFE、EXTERNAL_ACCESS和UNSAFE。

SAFE 最具限制性的权限集,只允许内部计算和本地数据访问,无法访问外部系统资源,如文件、网络、环境变量或注册表。并且只能使用上下文连接字符串指定数据库连接,即context connection=true或context connection=yes。
EXTERNAL_ACCESS 与SAFE具有相同的权限,但允许访问外部系统资源。
UNSAFE 允许程序集不受限制地访问SQL Server内部和外部的资源,此时程序集被授予FullTrust。

    一般情况下,在匪利用SQL
Server外部系统资源时提议使用SAFE方式的程序集,如果在程序集中需要看外部系统资源,推荐使用EXTERNAL_ACCESS,而未是UNSAFE,后者将许程序集中之代码对SQL
Server进程空间进行非法操作,可能会见损害SQL
Server的健壮性和可靠性。EXTERNAL_ACCESS程序集默认情况下以因SQL
Server的时服务账户运行,它可来得模拟调用方的Windows身份验证安全达成下文,这为不怕是自家于末端使用SQL
CLR连接Sharepoint List时为什么要拿次第集设置为EXTERNAL_ACCESS!

 

结语

    总之,公共语言运行时(CLR)为使用C# Custom程序集连接SQL
Server和标资源(诸如Sharepoint List、网络资源、文件系统等),以及SQL
Server本身数据运算提供了美好的功底和更好之便利性。在产一致首文章被本人用介绍如何当SQL
Server 2008面临拉开CLR并编写CLR使之以SQL
Server中成功运行,当中或者会见遇到重重聊的问题,到时我会一一为来解决办法。

1 2 3 4

相关文章