我想在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!");
}
如何解决此问题?