-----------------------------存储过程调用COM+组件-------------------------------
ALTER proc Proc_SendMsgToClient(@MsgContext varchar(4000))
/*
使用COM+发送局域网广播消息
@MsgContext varchar(4000) 消息内容
返回值: Send Message OK.表示发送成功
*/
as
DECLARE @object int
DECLARE @hr int
DECLARE @property varchar(255)
DECLARE @return varchar(255)
DECLARE @src varchar(255), @desc varchar(255)
EXEC @hr = sp_OACreate 'SQLInterop.RMSMessageSendCOM', @object OUT
IF @hr <> 0
BEGIN
EXEC sp_OAGetErrorInfo @object, @src OUT, @desc OUT
SELECT hr=convert(varbinary(4),@hr), Source=@src, Description=@desc
RETURN
END
EXEC @hr = sp_OASetProperty @Object, 'MsgContext', @MsgContext
IF @hr <> 0
BEGIN
EXEC sp_OAGetErrorInfo @object, @src OUT, @desc OUT
SELECT hr=convert(varbinary(4),@hr), Source=@src, Description=@desc
RETURN
END
EXEC @hr = sp_OAMethod @object, 'SendMsgToClient', @return OUT
IF @hr <> 0
BEGIN
EXEC sp_OAGetErrorInfo @object, @src OUT, @desc OUT
SELECT hr=convert(varbinary(4),@hr), Source=@src, Description=@desc
RETURN
END
PRINT @return
EXEC @hr = sp_OADestroy @object
IF @hr <> 0
BEGIN
EXEC sp_OAGetErrorInfo @object, @src OUT, @desc OUT
SELECT hr=convert(varbinary(4),@hr), Source=@src, Description=@desc
RETURN
END
-----------------------------------C#写的COM+组件-----------------------------------
using System;
using System.Runtime.InteropServices;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Net;
using System.Net.Sockets;
using System.Text;
select @cnt = count(*) from inserted
if @cnt = 0
begin
select @cnt
return
end
select @TmpStr ='3|all|192.168.0.198|update+1+['
select @MenuIDSTR=''
declare Cur_Meunu CURSOR FOR select MenuID from inserted
OPEN Cur_Meunu
FETCH NEXT FROM Cur_Meunu INTO @MenuID
WHILE @@FETCH_STATUS=0
BEGIN
if @MenuIDSTR=''
SELECT @MenuIDSTR=@MenuID
else
SELECT @MenuIDSTR=@MenuIDSTR+','+@MenuID
FETCH NEXT FROM Cur_Meunu INTO @MenuID
END
CLOSE Cur_Meunu
DEALLOCATE Cur_Meunu
if @cnt<50
begin
SELECT @MessageText = @TmpStr+@MenuIDSTR+']'
exec Proc_SendMsgToClient @MessageText
end
else
begin
--需要更新的菜品太多,通知更新全部
exec Proc_SendMsgToClient '3|all|192.168.0.198|update+1'
end