我正在尝试使用ms-sql为我的游戏创建一个程序查询,但我有点被困......
让我们说, 我有一个包含用户名和密码行的数据库。 我使用过程查询来选择用户名和密码。 如果一切正常,那么程序将输出“结果代码”
我如何调用过程查询
BEGIN_DECLARE_SQLUNIT( SP_AccountSelect, "{ call AccountAuth(?,?) }" )
BEGIN_VARIABLE()
char m_szUserID[MAX_SIZE_USER_ID + 1];
char m_szUserPW[MAX_SIZE_USER_ID + 1];
int m_nResultCode;
END_VARIABLE()
BEGIN_PARAM(3)
PARAM_ENTRY_STR(SQL_PARAM_INPUT, m_szUserID)
PARAM_ENTRY_STR(SQL_PARAM_INPUT, m_szUserPW)
PARAM_ENTRY(SQL_PARAM_OUTPUT, m_nResultCode)
END_PARAM()
END_DECLARE_SQLUNIT()
到目前为止的程序:
ALTER PROCEDURE [dbo].[AccountAuth] /* Procedure Name. */
@m_szUserID varchar(20),
@m_szUserPW varchar(50)
AS
SET NOCOUNT ON;
DECLARE @m_nResultCode int
select @m_nResultCode = 100
BEGIN
SELECT @m_szUserID = username, @m_szUserPW = password
FROM account
WHERE username = @m_szUserID;
END
我现在的问题是我不知道如何让IFS像检查用户名是否正确,如果密码是正确的那样...因为我总是要制作不同的结果代码。登录错误=结果代码100,错误的用户名= 101,错误的密码= 102 ..
我现在正在寻找几个小时,但我找不到任何有用的东西。 有没有人知道我能找到有用的东西的链接?
答案 0 :(得分:0)
这是您可以为登录呼叫编写的最基本的过程,但在实际应用程序中,您需要检查存在但可能已禁用,已删除,未在一段时间内登录的登录和bla bla。您可以添加尽可能多的检查,以确保只有经过授权的人员才能访问。
尝试这样的事情......
ALTER PROCEDURE [dbo].[AccountAuth] /* Procedure Name. */
@m_szUserID varchar(20),
@m_szUserPW varchar(50),
@m_nResultCode int OUTPUT
AS
BEGIN
SET NOCOUNT ON;
DECLARE @Password varchar(50);
IF EXISTS(SELECT 1 FROM account WHERE username = @m_szUserID)
BEGIN
SELECT @Password = [password]
FROM account
WHERE username = @m_szUserID;
IF (@Password = @m_szUserPW)
BEGIN
SET @m_nResultCode = 1; -- 1 for successful login
END
ELSE
BEGIN
SET @m_nResultCode = 0; -- 0 for Unsuccessful login
END
END
ELSE
BEGIN
SET @m_nResultCode = 2; -- 2 if User Name does not exists
END
END
调用存储过程
DECLARE @OUT_Result INT;
EXECUTE [dbo].[AccountAuth] @m_szUserID = 'UserName'
,@m_szUserPW = '123456'
,@m_nResultCode = @OUT_Result OUTPUT
-- Now do what ever you need to do with @OUT_Result variable.