Как проверить сеансы входа в систему, чтобы запретить многократные входы в систему в C # winform приложении в SQL Server? - PullRequest
0 голосов
/ 15 апреля 2019

Я хочу создать хранимую процедуру в 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!");
}

Как я могу исправить эту проблему?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...