前面我们已经对CLR中的扩展函数有了一定的了解了,那么我们想扩展数据库的存储过程,是否也可以呢,答案是肯定的。
我们接下来就介绍下扩展存储过程的做法。
①,接之前我们创建的数据库项目,在项目中我们创建一个存储过程类 StoredProcedureClass.cs,代码如下:
using System;
using System.Data;
using System.Data.SqlClient;
using System.Data.SqlTypes;
using Microsoft.SqlServer.Server;
public partial class StoredProcedures
{
//这里是告诉sqlserver,这个方法要注册成存储过程
//这个例子主要是实现sql语句,查询表instore的所有数据。
[Microsoft.SqlServer.Server.SqlProcedure]
public static void TestStoredProcedure()
{
using (SqlConnection cn = new SqlConnection())
{
//使用上下文链接也就是当前数据库链接
cn.ConnectionString = "context connection=true";
using (SqlCommand cmd = cn.CreateCommand())
{
cmd.CommandText = "Select * from instore";
cn.Open();
//SqlContext.Pipe.Send这个方法输出结果集
//接受SqlDataReader,SqlDataRecord和string
SqlContext.Pipe.Send(cmd.ExecuteReader());
//你也可以用下边这样
//SqlContext.Pipe.ExecuteAndSend(cmd);
}
}
}
};
编译部署完成后,我们会在存储过程那里看到我们已经创建好存储过程TestStoredProcedure
接下来执行该存储过程,我们可以在服务器资源管理器这里选择TestStoredProcedure,右键执行,也可以,在数据库sql里面用
exec TestStoredProcedure ,结果都是一样的。
如果需要调试,请参考前面发表的关于CLR调试方法。
这就是扩展存储过程的简单应用。