一 visual studio 中新建 数据库 项目 项目中新建项 SQLSERVER CLR C#用户自定义函数
二 自定义函数内容
using System;
using System.Data;
using System.Data.SqlClient;
using System.Data.SqlTypes;
using Microsoft.SqlServer.Server;
using System.Collections.Generic;
using System.Text;
using System.Net;
using System.Net.Sockets;
public partial class UserDefinedFunctions
{
[Microsoft.SqlServer.Server.SqlFunction]
public static SqlString SqlFunction1(String welcome, String ip, int port)
{
byte[] data = new byte[1024];//定义一个数组用来做数据的缓冲区
IPEndPoint ipep = new IPEndPoint(IPAddress.Parse(ip), port);
Socket server = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
data = Encoding.ASCII.GetBytes(welcome);
server.SendTo(data, data.Length, SocketFlags.None, ipep);//将数据发送到指定的终结点
// 在此处放置代码
return new SqlString (string.Empty);
}
}
三 生成项目
四 数据中新建程序集 程序集路径 选择上一步生成的dll文件
程序所有者 选择 dbo 权限集 无限制
五 数据库上开启 clr
exec sp_configure 'clr enabled'
exec sp_configure 'clr enabled',1 --开启SQLServer的CLR集程。
reconfigure with override
EXEC sp_changedbowner 'sa' --确保部署程序集时所使用的账号是目标数据库的所有者
Alter Database [xc] SET TRUSTWORTHY ON --目标数据库的可信任属性需要设为FALSE
ALTER DATABASE [xc] SET COMPATIBILITY_LEVEL = 80
六 执行注册函数的脚本(
GO
CREATE FUNCTION [dbo].[sendmessage]
(@message NVARCHAR (4000), @ip NVARCHAR (400), @port int)
RETURNS NVARCHAR (4000)
AS
EXTERNAL NAME [Database2].[UserDefinedFunctions].[SqlFunction1]
七 测试
select dbo.sendmessage('123abc','127.0.0.1',8090)