如何利用企业管理器向客户端发消息?

fenglaotou 2004-12-21 10:23:59
在企业管理器中我们可以在锁与进程节中可以查看当前的一些活动进程.当右击某一属性时我们可以看到发送消息按钮.一种是按用户发送,一种是按机器名发送.客户端应用程序(使用powerbuilder开发的).现在的问题是,1.按用户发送,用户全部都是sa,但发送都不成功;2.按机器名发送,要发送的进程又得不到当前进程的机器名称.不知道怎么使用.怎样才能让进程其获得机器名呢?或者怎么向引起此进程的机器发送消息?请指教,谢谢
...全文
330 26 打赏 收藏 转发到动态 举报
写回复
用AI写文章
26 条回复
切换为时间正序
请发表友善的回复…
发表回复
tylike 2005-02-26
  • 打赏
  • 举报
回复
我也在找类似的问题,顶一下
稍后开贴
zjcxc 元老 2004-12-23
  • 打赏
  • 举报
回复
检查连接字符串中的workstation id了么?
zjcxc 元老 2004-12-22
  • 打赏
  • 举报
回复
不知道你的PB用什么方式连接数据库的

影响主机名的设置还有连接字符串中的workstation id,如果这个设置了,则主机名显示的是这个设置的值,你检查一下你的PB程序,看看是否设置了这个
ljian_mail 2004-12-22
  • 打赏
  • 举报
回复
可以把各进程中的net_address转换为ip地址。直接向ip地址发送就行了
zjcxc 元老 2004-12-22
  • 打赏
  • 举报
回复
没遇到过主机名是空的情况,你在客户端用查询分析器连接试试
liqunen 2004-12-22
  • 打赏
  • 举报
回复
我也有 fenglaotou(星期天)遇到的情况在客户端运行hosname都是空的,而用查询分析器好像能正确得到值,我也搞不懂.
这个贴子很好.支持ljian_mail(新手) 不要生气
vinsonshen 2004-12-22
  • 打赏
  • 举报
回复
学习下~~~
ljian_mail 2004-12-22
  • 打赏
  • 举报
回复
为什么我每次回答问题都没人给我分?我真不想回答了。
不过我又不忍心看到你们的问题得不到解决,唉!
ljian_mail 2004-12-22
  • 打赏
  • 举报
回复
net_address转换为ip地址:


create PROCEDURE dbo.SP_SPIDtoIP @SPID intAS

-- SPID to MAC
DECLARE @MAC as varchar(12)

SELECT @MAC = NET_ADDRESS FROM master..sysprocesses WHERE SPID = @SPID

-- MAC to IP
DECLARE @MACDisplay as varchar(18)
DECLARE @IP as varchar(15)

CREATE TABLE #temp (OUTPUT varchar(255) null)
SET NOCOUNT ON
INSERT INTO #temp EXEC master..xp_cmdshell 'arp -a'
SELECT @MACDisplay = LEFT(@MAC, 2) + '-' + SUBSTRING(@MAC, 3, 2) + '-' + SUBSTRING(@MAC, 5, 2) + '-' + SUBSTRING(@MAC, 7, 2) + '-' + SUBSTRING(@MAC, 9, 2) + '-' + SUBSTRING(@MAC, 11, 2)

SELECT @IP = SUBSTRING(output, 3, 15) FROM #temp WHERE output LIKE '%' + @MACDisplay + '%'



dROP TABLE #temp
SET NOCOUNT OFF
fenglaotou 2004-12-22
  • 打赏
  • 举报
回复
在客户端用企业管理器,或查询分析器操作数据库时,都能在服务器端查看进程时看到客户端登陆的主机名称.但是客户端运行的应用程序产生的进程无法在在服务端查看其主机名称.

不过网络地址是可以获得的,不知道如何转换为ip地址来利用.
fenglaotou 2004-12-21
  • 打赏
  • 举报
回复
我试了很多边,用运行程序进行操作,然后查看产生进程的hosname ,全不都是空的
但是用查询分析器登陆连接产生的进程就能查看到hosname
fenglaotou 2004-12-21
  • 打赏
  • 举报
回复
不是想所有连接发消息,是向所指定进程的引起机器发消息
fenglaotou 2004-12-21
  • 打赏
  • 举报
回复
to :zjcxc(邹建)

1.如何确定主机名称呢,根本没有名称,我用事件查看器看hostname也是空空的
2.存储过程怎么实现?
能否详细点
zjcxc 元老 2004-12-21
  • 打赏
  • 举报
回复
--给当前连接SQL的所有计算机发信息的示例存储过程

create proc p_sendmsg
@msg nvarchar(1000) --要发送的信息内容
as
declare @s nvarchar(4000)
set @msg=replace(isnull(@msg,''),'"','""')
declare tb cursor local for
select distinct 'net send "'+rtrim(hostname)+'" "'+@msg+'"'
from sysprocesses where hostname<>''
open tb
fetch tb into @s
begin
exec master..xp_cmdshell @s,no_output
print @s
fetch tb into @s
end
close tb
deallocate tb
go

--调用
exec p_sendmsg 'test'
go

--删除测试
drop proc p_sendmsg

zjcxc 元老 2004-12-21
  • 打赏
  • 举报
回复
1.进程信息中,主机列就是当前进程的客户端电脑名,这样你就可以确定是那个客户机连接的了

2.如果你是要给所有的客户机发信息,可以写个存储过程来处理
fenglaotou 2004-12-21
  • 打赏
  • 举报
回复
自定义的普通用户可以发给他消息吗/??
fenglaotou 2004-12-21
  • 打赏
  • 举报
回复
是的,
子陌红尘 2004-12-21
  • 打赏
  • 举报
回复
客户端全部都是通过sa用户的权限登录SQL Server服务器的???
fenglaotou 2004-12-21
  • 打赏
  • 举报
回复
我操作系统是win2000高级服务器版的。
"可选择"使用主机名",然后输入计算机名以便将消息发送到指定的计算机。 "
不想输入计算机名称,因为客户端有近100个点,我不知道当前进程是哪个机器引起的.
子陌红尘 2004-12-21
  • 打赏
  • 举报
回复
给当前连接的用户发送消息

展开服务器组,然后展开服务器。

展开"管理",然后展开"当前活动"。

单击"进程信息"。
服务器的当前活动即会显示在详细信息窗格中。
在详细信息窗格中,右击一个进程 ID,然后单击"发送消息"命令。
说明 当 SQL Server 企业管理器在 Microsoft® Windows® 98 上运行时,不可能向用户发送消息。

在"消息"框中键入消息。

另外,可选择"使用主机名",然后输入计算机名以便将消息发送到指定的计算机。



发送不成功是因为你把消息发送到了后台进程,尝试以按用户发送方式把消息发送给一个running的进程。
加载更多回复(6)

34,587

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧