如何检查登录会话以拒绝多个登录到SQL Server中的C#Winform应用程序?

时间:2019-04-14 22:31:06

标签: c# sql-server

我想在SQL Server中创建一个存储过程,当C#Winforms应用程序尝试登录时,它将检查用户名和密码是否正确。

之后,如果已经打开任何连接(主要思想是拒绝对应用程序的多次登录),将不允许在另一台计算机上打开应用程序。

我的问题是当我使用此命令在SQL Server Management Studio中运行此过程时

openSession 'username', 'pass'

它返回我需要的是

loginStatus = 2 or 3

但是当我在C#应用程序中执行此命令时,它每次都会返回:

 loginStatus = 1

完整的SQL Server程序:

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

ALTER PROCEDURE [dbo].[openSession]
    @username VARCHAR(50),
    @password VARCHAR(200)
AS
BEGIN
    DECLARE @isLoginSuccess INT;

    BEGIN
        SELECT
            @isLoginSuccess = COUNT(*)
        FROM
            Users 
        WHERE
            users.Username = @username AND Users.Pwd = @password
    END

    IF @isLoginSuccess > 0              
        SELECT COUNT(*) AS loginStatus 
        FROM sys.dm_exec_sessions 
        WHERE is_user_process = 1 
          AND original_login_name = @username
    ELSE
    BEGIN
        SELECT 0 AS loginStatus
    END
END

在客户端C#应用程序中:

if (stat == 0)
{
    MessageBox.Show("Login failed! Please check username or password!");
}
else if (stat == 1)
{
    // Program.isSessionOpen = true;
    // this.Close();
}
else
{
    MessageBox.Show("Application already!");
}

如何解决此问题?

0 个答案:

没有答案