C# CLR集成中的套接字通信

C# CLR集成中的套接字通信,c#,sql-server,sockets,sqlclr,C#,Sql Server,Sockets,Sqlclr,套接字通信在CLR集成中是否表现良好 例如:我在CLR集成中创建了一个PROC。它从一个表中获取所有数据,只想将数据发送到TCP服务器 命令: 从'G:\TcpClrTest.dll'创建程序集TcpClr,权限设置=外部访问权 去 创建过程SendDataToSrv ( @姓名nvarchar(20) ) 作为外部名称 TcpClr.[TcpClrTest.TcpSend].SqlProce; 去 EXEC SendDataToSrv“cdc.dbo\u Test\u CT” TcpClrT

套接字通信在CLR集成中是否表现良好

例如:我在CLR集成中创建了一个PROC。它从一个表中获取所有数据,只想将数据发送到TCP服务器

命令:

从'G:\TcpClrTest.dll'创建程序集TcpClr,权限设置=外部访问权
去
创建过程SendDataToSrv
(
@姓名nvarchar(20)
)
作为外部名称
TcpClr.[TcpClrTest.TcpSend].SqlProce;
去
EXEC SendDataToSrv“cdc.dbo\u Test\u CT”
TcpClrTest.dll中的一些代码:

使用(SqlCommand cmd=newsqlcommand(“从tableName中选择*,con))
{
使用(SqlDataReader=cmd.ExecuteReader())
{
while(reader.Read())
{
//字符串值=读取器[0]。ToString();
//tcpClient.Write(值);
//……获取所有数据并发送到tcp服务器。
}
}
}
我已经用命令exec SendDataToSrv'cdc.dbo_Test_CT'执行了这个过程,这个表有100000行和18列。这将花费大约5分钟。我还将相同的代码复制到公共函数,而不是CLR集成,它只需要大约30秒。TCP服务器和SQL服务器在同一台机器上运行。如果我删除
tcpClient.Write(值)
code,只需从表中获取数据,即可快速完成


在CLR集成中,我应该做些什么来改进

为什么需要从SQL Server内部发送数据?它是受支持的,但在99%的情况下,这在架构上是一个坏主意。它很脆。只需让应用程序发送数据。当服务器启动时,它将从SQL Server获取所有数据并将其存储到内存中。当表的某些数据发生更改时,例如
更新
删除
插入
。,我必须获取更改消息并将更改的数据重新加载到内存中。因此,我选择CDC获取DML消息,选择CLR集成查看CDC表并将数据发送到服务器。还有其他更好的方法吗?您将数据发送到哪个服务?为什么该服务不能从CDC表中读取数据,就像它在服务器启动时读取数据一样?如果需要任何TCP通信,只需告诉远程服务检查更新。@zhengkang这是相当愚蠢的。改用。使用.net作为应用程序服务器。这听起来像是你想要做的