使用 SQL Server 查找'who is'

分享于 

4分钟阅读

数据库

  简体 双语

介绍

有时候,你需要在你的SQL Server 上运行 sp_who,找出谁是谁,他们做什么。 存储过程适用于这个过程,但是看起来很难看到输出。 有几个宽列,除非重写过程,否则不能对输出进行裁剪。 在查看实际完成的查询之后,我决定在一个程序中完成,并在网格中列出结果。 我希望能够对任何列进行排序,并记住最后一次排序的列。 我通常运行sp_who来杀死某个进程,我还想添加一个kill命令。

这个项目完成了所有这些,并展示了如何从数据库中获取信息,对列进行排序,保存信息。 在encryption加密,indebted another 代码项目用户 Ahmed在 SQL Server 注册信息&查询字符串中的article加密密码 Field。 尽管文章是用 VB.Net 编写的,但是它很容易将它转换为 C#。

用于保存sp_who数据的主要数据结构是 WhoInfo

publicclass WhoInfo
{
 int spid;
 string status;
 string loginame;
 string hostname;
 string blk;
 string dbname;
 string cmd;
 long physical_io;
 int memusage;
}

将在数据库上运行查询来加载这里数据。

SELECT spid, status, RTRIM(loginame) AS loginame, hostname, 
 CONVERT(char(5), blocked) AS blk, 
 DB_NAME(dbid) AS dbname, cmd, physical_io, memusage 
 FROM master.dbo.sysprocesses where ecid = 0

这几乎是sp_who命令执行的查询,但我只在每个进程中返回一个线程。 如果需要的话,添加另一个对话框来显示线程的List 不会太难。 我将信息发送到 DataReader,然后遍历行,添加到 WhoInfo 结构,然后将它的添加到 ListView 中。 我选择 ListView,因为我想在列上排序。 排序的结果是排序将使用字母排序规则进行排序。 在列包含数字之前,这一点很好。 对于数字数据,排序需要一些帮助。 我以 ColumnSorter 类的形式提供。 这里类被传递给方法的ListViewListViewItemSorter。 然后,任何排序都访问列的Compare 方法。 我们只需要 Compare 方法,该方法根据数据类型进行排序。 如果更改列顺序,则还需要更改。

连接并杀死你的用户

这里应用程序中有两个对话框。 一个收集数据库连接的登录信息。 另一个显示进程已经锁定的另一个 List。 服务器的密码存储加密,因此在安装这里服务器时没有问题,你只需要用户查看谁是谁,并可能杀死他们,( 他们的过程是)。 on命令是通过右击菜单访问的,可以通过双击 List 条目来显示锁。

配置文件

配置文件是另一个有趣的功能。 我使用 DataSet 来操作数据,方法是使用 ReadXML 方法来获取数据。 如果文件不存在,我将创建一个模板。 这里文件存储数据库服务器名称和密码。 它还跟踪最后一次排序的列。 这给出了一个使用 StreamWriter的简单例子。

结束语

我希望这个应用程序的各个部分对其他人有用,以给他们一些代码 Fragment。 true 奖金是一个非常有用的应用程序,至少在 SQL Server 管理员中是如此。

历史记录

版本 1.0 - 初始版本


Server  FIND