C# 类库开发代码

using Microsoft.SqlServer.Server;
using System;
using System.Data;
using System.Data.OleDb;
using System.IO;
using System.Net;
using System.Reflection;
using System.Text;
using System.Xml;
using System.Web;
using System.Net.Sockets;
using System.Collections.Generic;

public class CLRService
{
    /// <summary>
    /// 查看CLR版本
    /// </summary>
    /// <param name="I_ReturnMessage"></param>
    [SqlProcedure]
    public static void CLR_Version(out string I_ReturnMessage)
    {
        I_ReturnMessage = Assembly.GetExecutingAssembly().GetName().Version.ToString();
    }

   [SqlProcedure]
    public static void SocketSend(string ServerIP, int Port, string SenderMessage, out int ReturnValue, out string I_ReturnMessage)
    {
        ReturnValue = -1;
        I_ReturnMessage = "";
        Socket mySocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
        try
        {
            ////域名解析
            //IPHostEntry ipHostInfo = Dns.Resolve("host.contoso.com");
            //IPAddress ipAddress = ipHostInfo.AddressList[0];

            IPAddress ipAddress = IPAddress.Parse(ServerIP);
            IPEndPoint ipEndPoint = new IPEndPoint(ipAddress, Port);
            mySocket.Connect(ipEndPoint);
            byte[] byteSend = Encoding.UTF8.GetBytes(SenderMessage);
            mySocket.Send(byteSend, byteSend.Length, 0);
            
            byte[] byteReceive = new byte[1024];
            int length = mySocket.Receive(byteReceive);    
            I_ReturnMessage = Encoding.UTF8.GetString(byteReceive, 0, length);
            ReturnValue = 0;

            mySocket.Close();
        }
        catch (ArgumentNullException ae)
        {
            if (mySocket.Connected)
            {
                mySocket.Shutdown(SocketShutdown.Both);
                mySocket.Close();
            }
            I_ReturnMessage = "Socket:Fail ArgumentNullException : "+ ae.ToString();
        }
        catch (SocketException se)
        {
            if (mySocket.Connected)
            {
                mySocket.Shutdown(SocketShutdown.Both);
                mySocket.Close();
            }
            I_ReturnMessage = "Socket:Fail SocketException : "+ se.ToString();
        }
        catch (Exception e)
        {
            if (mySocket.Connected)
            {
                mySocket.Shutdown(SocketShutdown.Both);
                mySocket.Close();
            }
            I_ReturnMessage = "Socket:Fail Unexpected exception : "+ e.ToString();
        }
        finally
        {
            if (mySocket.Connected)
            {
                mySocket.Shutdown(SocketShutdown.Both);
                mySocket.Close();
            }
        }
    }

}

SQL Server 部署代码:

/*文件名:SqlCLRProcedure
*
*2019年10月22日
*================================================================
* 描述:SQL Server CLR 存储过程
* 内容:1、版本检查
	2、发送套接字数据SocketSend
*================================================================
部署脚本:
数据库查询设计器中执行
-- C:\Program Files\Microsoft Visual Studio 9.0\Common7\IDE\vsdiag_regwcf.exe -u
-- 如不执行以上操作,安装后续服务时将报machine.config的错误
-- 执行上述操作后,服务器需要重启.*/

--部署.NET4.0程序集
EXEC sp_configure 'clr enabled', 1;
RECONFIGURE WITH OVERRIDE;
GO

ALTER DATABASE [OrBitClr] SET Trustworthy ON;
GO

use [OrBitClr];
exec sp_changedbowner 'sa';
GO


CREATE ASSEMBLY [System.Web]
from
    'C:\Windows\Microsoft.NET\Framework64\v4.0.30319\System.Web.dll'
with
    permission_set = UNSAFE; --Fails if not 64 on 64 bit machines  
GO

--部署本程序集
CREATE ASSEMBLY  
[SqlCLRProcedure] from
'D:\SqlCLRProcedure.dll'
with permission_set = UNSAFE  
GO

--[CLR_Version]
CREATE PROCEDURE [dbo].[CLR_Version] 
( 
@I_ReturnMessage nvarchar(4000)='' output
) 
WITH EXECUTE AS CALLER 
AS
EXTERNAL NAME [SqlCLRProcedure].[CLRService].[CLR_Version] 
GO 


--SocketSend
CREATE PROCEDURE [dbo].[SocketSend] 
( 
@ServerIP nvarchar(100)='',
@Port int= 8007 ,
@SenderMessage nvarchar(max)='',
@ReturnValue int=0 output,
@I_ReturnMessage nvarchar(4000)='' output
) 
WITH EXECUTE AS CALLER 
AS
EXTERNAL NAME [SqlCLRProcedure].[CLRService].[SocketSend] 
GO 

作者 uoscn