经典案例之创建CLR存储过程

开发 后端
文章主要介绍了我们如何在Visual Studio 2005中创建基于SQL Server 2005的CLR存储过程,一个例子让你很快了解其中的编程思想。

学习了很长时间,在这里和大家分享一下关于CLR存储过程方面的问题,有一个小的实例大家来看看。CLR存储过程提供面向对象的功能,例如封装、继承和多态性。现在,相关代码可以很容易在类和命名空间中进行组织。在使用大量服务器代码时,这样可以更容易地组织和维护代码,通过使用托管代码而实现某些数据库功能。

对于计算和复杂的执行逻辑,基于CLR的托管代码比Transact-SQL 更适合,托管代码的一个优点是类型安全性,它全面支持许多复杂的任务,包括字符串处理和正则表达式。通过 .NET Framework 库中提供的功能,可以访问数千个预生成的类和例程。可以很容易从任何存储过程、触发器或用户定义函数进行访问。基类库包括的类提供用于字符串操作、高级数学运算、文件访问、加密等的功能。对于几乎或根本不需要过程逻辑的数据访问,还是使用 Transact-SQL。对于具有复杂逻辑的CPU密集型函数和过程最好还是使用托管代码。

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

StuInfo(学生信息表)

StuID  

学生 ID  

StudentName  

学生姓名  

StudentNO  

学生学号  

StudentUniversity  

所在学院  

NationCode  

民族代码  

 
Nation(民族表)
 

NationCode  

民族代码  

NationName  

民族名称

 

新建立一个文件,选择“存储过程”的选项,命名为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("context connection=true"))  
  15. {  
  16. conn.Open();  
  17. SqlCommand cmd = new SqlCommand();  
  18. cmd.CommandType = CommandType.Text;  
  19. cmd.Connection = conn;  
  20. cmd.CommandText = sql;  
  21. SqlDataReader rdr = cmd.ExecuteReader();  
  22. sp.Send(rdr);  
  23. }  
  24. }  
  25. [SqlProcedure]  
  26. public static void GetStuInfo(string strNationCode)  
  27. {  
  28. string sql = "select Stu.StudentName, Stu.StudentNo, Stu.StudentUniversity,Na.NationName from StuInfo Stu inner join Nation Na on Stu.NationCode = Na.NationCode  where Stu.NationCode = '" + @strNationCode + "'";  
  29. using (SqlConnection conn = new SqlConnection("context connection=true"))  
  30. {  
  31. conn.Open();  
  32. SqlPipe sp = SqlContext.Pipe;  
  33. SqlCommand cmd = new SqlCommand();  
  34. cmd.CommandType = CommandType.Text;  
  35. cmd.Connection = conn;  
  36. cmd.CommandText = sql;  
  37. SqlParameter paramstrNationCode = new SqlParameter("@strNationCode", SqlDbType.VarChar, 11);  
  38. paramstrNationCode.Direction = ParameterDirection.Input;  
  39. paramstrNationCode.Value = strNationCode;  
  40. cmd.Parameters.Add(paramstrNationCode);  
  41. SqlDataReader rdr = cmd.ExecuteReader();  
  42. sp.Send(rdr);  
  43. }  
  44. }  
  45. }; 

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

 

【编辑推荐】

  1. 详解CLR中Jit编译发生的过程
  2. 深入了解.NET编译器中CLR加载过程
  3. 简单介绍CLR泛型及其优势
  4. 浅谈CLR 4.0安全模型的运作机制
  5. CLR线程池的作用与原理浅析
责任编辑:田树 来源: 博客
相关推荐

2009-09-18 10:40:05

CLR存储过程

2009-10-22 15:09:40

CLR存储过程

2009-09-18 14:09:57

SQL CLR存储过程

2009-10-22 13:02:47

SQL CLR存储过程

2009-10-22 18:06:31

CLR存储过程

2009-09-18 10:55:17

CLR存储过程

2009-09-17 19:19:17

CLR存储过程

2009-09-17 18:27:40

CLR是什么

2010-04-16 10:11:20

Oracle存储过程

2010-10-09 17:08:15

MySQL存储过程

2010-07-05 10:06:51

SQL Server扩

2018-11-05 15:14:42

MySQL编程语言技术

2010-11-29 15:25:39

Sybase存储过程

2010-05-19 14:03:41

MySQL 存储过程

2010-10-12 11:07:34

MySQL存储过程

2010-06-07 15:36:36

MySQL存储过程

2010-04-20 09:43:34

OracleDB2

2010-10-29 16:17:55

Oracle存储过程

2011-07-19 15:18:46

存储过程sql语句

2010-04-15 17:45:26

Oracle存储过程
点赞
收藏

51CTO技术栈公众号