浅析基于SQL2005的CLR存储过程

CLR存储过程不是很容易理解的,笔者用简单的语言对CLR存储过程进行了详细的描述,不仅仅从理论,也从实现方法上对其进行了讲述,希望对你有所帮助。

让客户满意是我们工作的目标,不断超越客户的期望值来自于我们对这个行业的热爱。我们立志把好的技术通过有效、简单的方式提供给客户,将通过不懈努力成为客户在信息化领域值得信任、有价值的长期合作伙伴,公司提供的服务项目有:域名与空间、网页空间、营销软件、网站建设、扎兰屯网站维护、网站推广。

在 SQL Server 2005 中,可以在SQL Server实例中使用以下方法创建数据库对象:基于 Microsoft .NET Framework 公共语言运行时 (CLR) 创建中的程序集使用编程方法创建。能够利用由CLR提供的众多编程模型的数据库对象包括触发器、存储过程、函数、聚合函数和类型。

虽然Transact-SQL是专门为数据库中的直接数据访问和操作而设计,但是它没有提供编程构造来使数据操作和计算更加容易。例如,Transact-SQL 不支持数组、集合、for-each 循环、位转移或类。

CLR存储过程提供面向对象的功能,例如封装、继承和多态性。现在,相关代码可以很容易在类和命名空间中进行组织。在使用大量服务器代码时,这样可以更容易地组织和维护代码,通过使用托管代码而实现某些数据库功能。

对于计算和复杂的执行逻辑,基于CLR的托管代码比Transact-SQL 更适合,托管代码的一个优点是类型安全性,它全面支持许多复杂的任务,包括字符串处理和正则表达式。

通过 .NET Framework 库中提供的功能,可以访问数千个预生成的类和例程。可以很容易从任何存储过程、触发器或用户定义函数进行访问。基类库包括的类提供用于字符串操作、高级数学运算、文件访问、加密等的功能。

对于几乎或根本不需要过程逻辑的数据访问,还是使用 Transact-SQL。对于具有复杂逻辑的CPU密集型函数和过程最好还是使用托管代码。

我们看如何在Visual Studio 2005中创建基于SQL Server 2005的CLR存储过程:

我们打开Visual Studio 2005,在对应数据库栏目下面有个SQL Server项目,新建立一个项目,命名为StoredStu,确定过后会显示一个数据库连接对话框,数据库连接好后,我们在数据库中有如下两个表,如下:

StuInfo(学生信息表)

Nation(民族表)

新建立一个文件,选择“存储过程”的选项,命名为StoredStu,在文件中写入以下的代码:

 
 
 
 
  1. using System;
  2. using System.Data;
  3. using System.Data.SqlClient;
  4. using System.Data.SqlTypes;
  5. using Microsoft.SqlServer.Server;
  6. public partial class StoredProcedures
  7. {
  8.     [Microsoft.SqlServer.Server.SqlProcedure]
  9.     public static void StoredStu()
  10.     {
  11.         // 在此处放置代码
  12.         SqlPipe sp = SqlContext.Pipe;
  13.         string sql = "Select * from StuInfo";
  14.         using (SqlConnection conn = new SqlConnection
  15. ("context connection=true"))
  16.         {
  17.             conn.Open();
  18.             SqlCommand cmd = new SqlCommand();
  19.             cmd.CommandType = CommandType.Text;
  20.             cmd.Connection = conn;
  21.             cmd.CommandText = sql;
  22.             SqlDataReader rdr = cmd.ExecuteReader();
  23.             sp.Send(rdr);
  24.         }
  25.     }
  26.     [SqlProcedure]
  27.     public static void GetStuInfo(string strNationCode)
  28.     {
  29.         string sql = "select Stu.StudentName, Stu.StudentNo,
  30. Stu.StudentUniversity,Na.NationName from StuInfo Stu inner join
  31. Nation Na on Stu.NationCode = Na.NationCode  where
  32. Stu.NationCode = '" + @strNationCode + "'";
  33.         using (SqlConnection conn = new SqlConnection
  34. ("context connection=true"))
  35.         {
  36.             conn.Open();
  37.             SqlPipe sp = SqlContext.Pipe;
  38.             SqlCommand cmd = new SqlCommand();
  39.             cmd.CommandType = CommandType.Text;
  40.             cmd.Connection = conn;
  41.             cmd.CommandText = sql;
  42.             SqlParameter paramstrNationCode =
  43.  new SqlParameter("@strNationCode", SqlDbType.VarChar, 11);
  44.             paramstrNationCode.Direction = ParameterDirection.Input;
  45.             paramstrNationCode.Value = strNationCode;
  46.             cmd.Parameters.Add(paramstrNationCode);
  47.             SqlDataReader rdr = cmd.ExecuteReader();
  48.             sp.Send(rdr);
  49.         }
  50.     }
  51. };

现在我们先对其进行编译,在“生成”菜单中选择“生成解决方案”,当编译完工程后,就需要为其进行部署了。同样选择“生成”菜单中的“部署解决方案”, 这样就会自动将写好的存储过程部署到 SQL Server 2005 中去。

为了确保SQL可以执行托管代码,我们还需要在SQL Server 2005中,执行下面的语句:

 
 
 
 
  1. EXEC sp_configure "clr enabled", 1; 
  2. RECONFIGURE WITH OVERRIDE; 
  3. GO 

执行显示的结果如下:

“配置选项'clr enabled' 已从0 更改为1。请运行RECONFIGURE 语句进行安装。”

这样就可以创建好CLR存储过程了。

当前标题:浅析基于SQL2005的CLR存储过程
当前地址:http://www.shufengxianlan.com/qtweb/news34/130784.html

网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联