浅析CLR存储过程实现传回信息

开发 后端
CLR存储过程存放于类别库项目SendYouDataReader 中,它示范如何使用 SqlPipe 对象的 Send 方法将查询结果(也就是 SqlDataReader 类别对象)直接传送至客户端。

为了让大家更了解如何实作 CLR存储过程来传回讯息,以下我们示范如何使用SqlPipe 对象之 Send 方法的第三种多载版本,将查询结果直接传送至客户端:

CLR存储过程存放于类别库项目SendYouDataReader 中,它示范如何使用 SqlPipe 对象的 Send 方法将查询结果(也就是 SqlDataReader 类别对象)直接传送至客户端。

特别要再次说明的是,虽然 Send 方法的执行效率略低于ExecuteAndSend 方法,但是在数据被传送至客户端之前,Send 方法能够提供***的弹性来处理数据,换句话说,如果您希望传送先前通过同处理序(In-Process)提供者所执行的查询结果,或是想要利用 SqlDataReader 的自订实作来预先处理数据,请使此多载版本的 Send 方法。完成之后的程序代码如下所示:

using Microsoft.SqlServer.Server;  
namespace SendYouDataReader  
{  
public class SendYouDataReaderClass  
{  
[Microsoft.SqlServer.Server.SqlProcedure()]  
public static void SendYouDataReader(decimal LowerSalary, 
decimal HigherSalary)  
{  
SqlCommand cmd;  
SqlDataReader dr;  
// 使用内容连接来进行连接。   
using (SqlConnection connection = new SqlConnection
("context connection=true"))  
{  
connection.Open();  
cmd = new SqlCommand(  
"SELECT 员工编号,姓名,目前薪资 FROM dbo.章立民研究室 " +  
"WHERE 目前薪资 BETWEEN @LowerSalary AND @HigherSalary", connection);  
cmd.Parameters.AddWithValue("@LowerSalary", LowerSalary);  
cmd.Parameters.AddWithValue("@HigherSalary", HigherSalary);  
dr = cmd.ExecuteReader();  
// 呼叫 SqlPipe 对象的 Send 方法将查询结果直接传送给客户端   
SqlContext.Pipe.Send(dr);  
}  
}  
}  
}  
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.

请执行如下所示之 SQL 指令,登录组件 SendYouDataReader.dll、建立一个参考所登录之组件 SendYouDataReader.dll 的CLR存储过程、然后执行此 CLR存储过程:

USE   
GO  
IF EXISTS (SELECT * FROM sys.procedures WHERE [name] = 'SendYouDataReader')  
DROP PROCEDURE SendYouDataReader;  
GO  
IF EXISTS (SELECT * FROM sys.assemblies WHERE [name] = 'SendYouDataReader')  
DROP ASSEMBLY SendYouDataReader;  
GO  
-- 登录组件SendYouDataReader.dll   
CREATE ASSEMBLY SendYouDataReader  
FROM  
'C:\SQL2005Demo\CH13\SendYouDataReader\SendYouDataReader\bin\  
SendYouDataReader.dll'  
WITH permission_set = Safe;  
GO  
-- 建立一个会参考所登录之组件SendYouDataReader.dll 的CLR存储过程   
CREATE PROCEDURE dbo.SendYouDataReader  
(  
@LowerSalary money, @HigherSalary money  
)  
AS EXTERNAL NAME  
SendYouDataReader.[SendYouDataReader.SendYouDataReaderClass].
SendYouDataReader;  
GO  
EXEC sp_configure 'clr enabled', '1';  
GO  
RECONFIGURE;  
GO  
DECLARE @return_value int  
-- 执行CLR 存储过程   
EXECUTE @return_value = dbo.SendYouDataReader  
@LowerSalary = 50000,  
@HigherSalary = 70000;  
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.

以上就是笔者介绍的关于CLR存储过程知识,希望能给大家带来帮助。

【编辑推荐】

  1. 浅析基于SQL2005的CLR存储过程
  2. 分析与对比CLR Via C#静态构造函数的性能
  3. 为你解疑:CLR是什么?
  4. linq to sql多表查询浅析
  5. linq to sql多表基础描述
责任编辑:阡陌 来源: IT168
相关推荐

2009-10-22 15:09:40

CLR存储过程

2009-09-18 14:09:57

SQL CLR存储过程

2009-09-17 19:19:17

CLR存储过程

2009-09-18 10:40:05

CLR存储过程

2009-10-22 14:05:55

CLR存储过程

2009-10-22 13:02:47

SQL CLR存储过程

2009-10-22 18:06:31

CLR存储过程

2009-09-18 13:47:17

CLR类库

2009-07-22 15:58:34

JDBC调用Oracl

2009-09-18 09:59:39

C# CLR

2009-09-18 09:02:45

CLR Via C#

2009-09-14 16:29:39

LINQ嵌套

2009-07-21 13:50:00

iBATIS.NET调

2009-07-22 09:39:18

CLR线程池

2009-07-27 14:41:33

ASP.NET调用存储

2010-11-29 09:12:46

sybase分页存储过

2009-08-26 09:48:48

C#异步套接字

2009-11-06 09:23:41

ASP.NET高效分页

2009-09-03 14:26:17

Jit编译

2018-06-21 16:20:48

云存储云计算IO
点赞
收藏

51CTO技术栈公众号