.net 如何判断谁已登录到SQL Server

.net 如何判断谁已登录到SQL Server,.net,sql-server,.net,Sql Server,我正在设计一个应用程序,我正在寻找最好的方法来告诉谁当前登录了SQL server。我将使用SSMS中内置的活动监视器,它显示访问服务器的所有进程的列表-非常酷 但是,如果在我的.NET代码中,每次我访问数据库时它都使用一个单独的连接,那么我如何才能知道当前登录的用户是谁?如果用户只是在看屏幕,而当时没有从数据库中检索数据,那么他们不会正确显示?您的断言是正确的,不执行数据库操作的用户将不可见。您确实需要手动存储某种类型的“登录用户”信息。您是对的。如果编码正确,将在保存或检索数据时创建连接,然

我正在设计一个应用程序,我正在寻找最好的方法来告诉谁当前登录了SQL server。我将使用SSMS中内置的活动监视器,它显示访问服务器的所有进程的列表-非常酷


但是,如果在我的.NET代码中,每次我访问数据库时它都使用一个单独的连接,那么我如何才能知道当前登录的用户是谁?如果用户只是在看屏幕,而当时没有从数据库中检索数据,那么他们不会正确显示?

您的断言是正确的,不执行数据库操作的用户将不可见。您确实需要手动存储某种类型的“登录用户”信息。

您是对的。如果编码正确,将在保存或检索数据时创建连接,然后立即关闭连接


假设您对谁登录到应用程序比谁登录到数据库服务器更感兴趣,那么您可以在数据库中保留会话信息,包括用户ID。然后,您可以简单地查询会话数据库以发现谁在线。根据您使用的开发技术,可能会有更好的解决方案。

可能有,可能没有。您认为登录到应用程序并不需要用户登录到数据库是正确的,事实上,这个概念并不存在。活动监视器(以及sp_who2)将仅显示活动连接-那些正在使用的连接

如果您使用池连接(我相信,在您的连接字符串中是pooled=true),这种情况就会发生变化。这样做,“关闭”的客户端连接将保持活动状态,您将在监视器中看到该连接。有更多的细节


但是,如果我是你,我会设计一种不同的方法来跟踪活动用户,一种不依赖池连接的方法。

我认为你在寻找
spu-who
spu-who2

在MSSQL server中,你可以运行以下命令

exec sp_who2
这将为您提供大量信息,包括谁登录、应用程序名称、当前命令等


谢谢

可以使用DMV sys.dm_exec_会话查找连接的会话。您可以将其加入sys.dm_exec_请求,以获取请求信息(如果它正在运行),或获取连接特定信息,您可以加入sys.dm_exec_连接。会话id用于所有联接


我个人会使用DMV而不是旧的存储过程。正如其他人指出的,如果连接关闭,你就看不到它,所以如果你想跟踪连接,你就必须考虑另一种缓存连接信息的方法。谁将查看此信息?数据库管理员将查看此信息,以便他们可以知道哪些用户仍在登录,并能够终止该用户的所有进程,这与SSMS.in.NET中的活动监视器非常相似,即使在我关闭数据库连接后,它仍会在活动监视器中显示为正在睡眠。这正常吗?另见。。。