登录社区:用户名: 密码: 忘记密码 网页功能:加入收藏 设为首页 网站搜索  

文档

下载

图书

论坛

安全

源码

硬件

游戏
首页 信息 空间 VB VC Delphi Java Flash 补丁 控件 安全 黑客 电子书 笔记本 手机 MP3 杀毒 QQ群 产品库 分类信息 编程网站
  立华软件园 - 安全技术中心 - 技术文档 - SQLServer 技术文章 | 相关下载 | 电子图书 | 攻防录像 | 安全网站 | 在线论坛 | QQ群组 | 搜索   
 安全技术技术文档
  · 安全配制
  · 工具介绍
  · 黑客教学
  · 防火墙
  · 漏洞分析
  · 破解专题
  · 黑客编程
  · 入侵检测
 安全技术工具下载
  · 扫描工具
  · 攻击程序
  · 后门木马
  · 拒绝服务
  · 口令破解
  · 代理程序
  · 防火墙
  · 加密解密
  · 入侵检测
  · 攻防演示
 安全技术论坛
  · 安全配制
  · 工具介绍
  · 防火墙
  · 黑客入侵
  · 漏洞检测
  · 破解方法
 其他安全技术资源
  · 攻防演示动画
  · 电子图书
  · QQ群组讨论区
  · 其他网站资源
最新招聘信息

SQL Server 2005中的CLR
发表日期:2005-12-22作者:[转贴] 出处:  

CLR集成概述

SQL Server现有编程模型
- Transact SQL(T-SQL)
- 扩展存储过程(XP)

CLR集成模型
- SQL Server 2005新增的编程模型
- 用任何托管代码编写存储过程、触发器和函数
- 可创建自定义的数据类型和聚合函数

注册和执行数据库中托管代码
- 托管代码编写staticshared)的类方法,生成程序集
- 程序集上载到SQL Server 2005,用Create Assembly数据定义语言(DDL)将其存储到系统目录(部署)
- 创建T-SQL对象,并将其绑定到已经上载的程序集的入口点,用Create Procedure/Function/Trigger/Type/Aggregate
- 使用,应用程序可以象T-SQL例程一样的调用

构建和部署
- VS.NET 2005提供的“SQL Server项目”的代码模板
- 部署过程自动创建程序集中定义的例程、类型和聚合

调试
- 不受客户端到服务器连接类型的影响
- 跨语言无缝集成,例如从T-SQL过程进入CLR过程

演示代码

SQL Query

use SQLDemo

EXEC sp_configure 'show advanced options','1';
go

reconfigure;
go

EXEC sp_configure 'clr enabled','1'
go

select dbo.ClrSplitter('Hello;world',1)

CS Code

using System;
using System.Data;
using System.Data.Sql;
using System.Data.SqlTypes;
using System.Data
using Microsoft.SqlServer.Server;

public partial class UserDefinedFunctions
{
 [Microsoft.SqlServer.Server.SqlFunction]
 public static SqlString Function1()
 {
  return new SqlString("Hello");
 }

 [SqlFunction]
 public static string ClrSplitter(string list, int element)
 {
  return list.Split(';')[element];
 }
};

CLR与T-SQL:编程模型

T-SQL
- 过程代码内部嵌入查询语言

CLR
- in-proc ADO.NET数据访问(System.Data.SqlServer)
- 产生冗长代码
- 容易在个层之间移动代码和利用现有技术

CLR与T-SQL:性能

T-SQL
- 数据访问方面性能好
- 适合编写数据访问密集的代码

CLR
- 过程代码,计算
- 通用规则,用CLR编写计算和逻辑密集代码

CLR与T-SQL:语句的提交、返回

T-SQL
- 过程代码SQL语句往返,T-SQL具有优势
- select查询语句,返回客户端

CLR
- 额外的代码层,造成性能降低
- SqlPipe对象将结果发送到客户端

CLR与T-SQL:导航

T-SQL
- 通过只进、只读光标实现
- 可更新光标当前位置行
- 适合与,执行一系列语句(insert/update/delete/select),带有几个或不带返回到客户端的行,并且不导航产生的行

CLR
- SqlDataAdapterReader实现
- 适合每行都有复杂的处理

CLR与扩展存储过程(XP)

- 粒度控制(权限SAFE/EXTERNAL_ACCESS/UNSAFE)
- 可靠性
- 数据访问
- 性能
- 可伸缩性

代码位置:数据库与中间层

数据验证
- 封装数据与逻辑
- 避免不同层中重复验证逻辑

减少网络流量
- 需要处理大量数据而产生很少结果集的任务
- 例如,数据分析中的需求预测、数值分析等

处理常见数据库变成任务和问题

- 使用Framework库进行数据验证
- 产生结果集
- SqlPipe
- 表值函数
- 可组合性
- 数据源
- 副作用操作
- 强类型化和返回的结果集的数量

用户自定义类型(UDT)

何时创建UDT
- 需要定义自己的标量类型
- 对已有类型(Framework)进行封装,如自定义日期/时间、货币
- 简单类型

何时不创建UDT
- 不要使用UDT对所有业务建模
- UDT不适合数据建模抽象,的确需要的项目,请设计中间层的O/R影射

小结

- SQL Server 2005通过集成CLR,支持任何托管代码编写存储过程、触发器和函数等例程
- 扩展数据库系统中的类型系统和聚合函数

相关白皮书

- SQL Server 2005中使用CLR白皮书
  http://www.microsoft.com/china/msdn/library/data/sqlserver/sqlclrguidance.mspx?pf=true


我来说两句】 【发送给朋友】 【加入收藏】 【返加顶部】 【打印本页】 【关闭窗口
中搜索 SQL Server 2005中的CLR

 ■ [欢迎对本文发表评论]
用  户:  匿名发出:
您要为您所发的言论的后果负责,故请各位遵纪守法并注意语言文明。

最新招聘信息

关于我们 / 合作推广 / 给我留言 / 版权举报 / 意见建议 / 广告投放 / 友情链接  
Copyright ©2001-2006 Lihuasoft.net webmaster(at)lihuasoft.net
网站编程QQ群   京ICP备05001064号 页面生成时间:0.00202