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