c# clr创建mssql的存储过程、函数
除了创建普通的存储过程外,还可以执行本机的文件操作、程序操作等,相当于功能扩展(需要mssql中配置权限)
但这样做有点超出数据库的功能了,按理说数据库只负责存储。
好像只能是单体的dll,引用其他dll后再注册到mssql时找不到
-----------------------------------------------------------------
转自:
https://www.cnblogs.com/aji88/archive/2009/06/04/1496219.html
在Sql Server 2005中,可以创建基于.Net Framework公共语言运行时(CLR)在存储过程。
要创建一个CLR存储过程,大致步骤如下:
- 开启SQL Server 2005的CLR支持。
- 编写CLR存储过程内容,并把类编译成DLL文件。
- 注册程序集。
- 创建引用程序集的存储过程。
- 执行CLR存储过程。
一.开启SQL Server 2005的CLR支持。
exec sp_configure 'clr','1'
go
reconfigure
go
二.编写CLR存储过程(以C#为例)
打开vs2005后,新建一项目,Visual C#->数据库,选择“SQL Server项目”,然后会弹出一个选择数据库的对话框,设置好要访问的数据库。在项目中添加一个存储过程。文件名是CLR_SP.CS
在CLR_SP.CS中输入如下代码:

Code
using System;
using System.Data;
using System.Data.SqlClient;
using System.Data.SqlTypes;
using Microsoft.SqlServer.Server;
public partial class StoredProcedures
{
[Microsoft.SqlServer.Server.SqlProcedure]
public static void Clr_Select(out string returnStr)
{
using (SqlConnection conn = new SqlConnection("context connection=true"))
{
conn.Open();
SqlCommand cmd = new SqlCommand("select * from tb_area", conn);
SqlDataReader dr = cmd.ExecuteReader();
System.Text.StringBuilder sb = new System.Text.StringBuilder();
while (dr.Read())
{
sb.Append(dr[0].ToString() + ":" + dr[1].ToString()+"\r");
}
returnStr = sb.ToString();
conn.Close();
}
}
};
然后选择“生成”-》“生成<项目名称>”,这样相应的就编译成了相应的DLL文件。
三.注册程序集
注册程序集有三种方法:
1.在SQL Server Management studio 里有注册向导的窗口
在程序集路径中选择DLL文件
2.用SQL代码

CREATE ASSEMBLY CLR_SPs
FROM 'D:\web\Net APP\SqlServerProject1\SqlServerProject1\bin\Debug\Clr_SPs.dll'
GO
3.在vs2005中选择“生成”-》“部署<项目名称>”,则会直接在相应的数据库里部署程序集。
四.创建引用程序集的存储过程。
注册完成后,可以创建引用程序集的存储过程,如下代码:

CREATE PROCEDURE Clr_Select
@outstr navarchar(400) output
AS EXTERNAL NAME Clr_SPs.StoredProcedures.Clr_Select
其中Clr_sps是程序集的名称,StoredProcedures是类的名称,Clr_Select是静态方法的名称。
五.执行CLR存储过程。

declare @r nvarchar(4000)
exec dbo.clr_select @r output
print @r
这样的话,我们就可以利用sql Server 2005来执行一些非数据类的操作,比如发email,执行FTP操作等。。。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
2018-08-27 使用redis
2017-08-27 sqlserver分区视图中分区列的规则