创建一个sql过程

时间:2014-06-14 11:57:00

标签: sql-server odbc

我正在尝试使用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 ..

我现在正在寻找几个小时,但我找不到任何有用的东西。 有没有人知道我能找到有用的东西的链接?

1 个答案:

答案 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.