Хранимая процедура SQL, сравнивающая NVARCHAR, не работает должным образом

У меня есть следующая хранимая процедура SQL Server 2012 Express:

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author:      Andy Armstrong
-- Create date: <Create Date,,>
-- Description: <Description,,>
-- =============================================
CREATE PROCEDURE db_CheckLogin 
    -- Add the parameters for the stored procedure here
    @LoginName NVARCHAR(15),
    @Password NVARCHAR(15),
    @ReturnCode UNIQUEIDENTIFIER OUTPUT
AS
BEGIN
    -- SET NOCOUNT ON added to prevent extra result sets from
    -- interfering with SELECT statements.
    SET NOCOUNT ON;

    -- Insert statements for procedure here
    SELECT UserID=@ReturnCode FROM tblMemberLogin WHERE LoginName = @LoginName AND LoginPassword = @Password;
END
GO

Я вызываю его из хранимой процедуры .NET С# следующим образом:

// Create Command Interface
            SqlCommand cmdStoredProc = new SqlCommand("db_CheckLogin", objConnection);
            cmdStoredProc.CommandType = CommandType.StoredProcedure;
            // Fill The Parameters Collection Based Upon Stored Procedure.
            SqlParameter workParam = null;
            workParam = cmdStoredProc.Parameters.Add("@LoginName", SqlDbType.NVarChar, 15);
            workParam = cmdStoredProc.Parameters.Add("@Password", SqlDbType.NVarChar, 15);
            // Prepare Output Parameter
            workParam = cmdStoredProc.Parameters.Add("@ReturnCode", SqlDbType.UniqueIdentifier);
            workParam.Direction = ParameterDirection.Output;
            // Set Values For Our Procedure
            cmdStoredProc.Parameters["@LoginName"].Value = ctrlUsername.Text;
            cmdStoredProc.Parameters["@Password"].Value = ctrlPassword.Text;
            // Exec Procedure
            cmdStoredProc.ExecuteNonQuery();

Однако по какой-то причине он не возвращает строку, которую я ожидал.

Схема для tblMemberLogin выглядит следующим образом:

UserID = уникальный идентификатор pk, LoginName = NVARCHAR(15) LoginPassword = NVARCHAR(15)

У меня есть одна строка в этой таблице с именем пользователя myUser и паролем passw0rd.

однако запуск кода с этим возвращает 0 строк. Запуск хранимой процедуры вручную также не работает, если выполняется запрос типа:

ВЫБЕРИТЕ UserID ИЗ tblMemberLogin, ГДЕ LoginName = 'myUser' AND LoginPassword = 'passw0rd' работает отлично! Пожалуйста, помогите мне определить, где я ошибаюсь.


person RenegadeAndy    schedule 17.06.2014    source источник
comment
Пожалуйста, не говорите нам, что вы храните пароли в виде обычного текста :(   -  person Bridge    schedule 17.06.2014
comment
в операторе select вы назначаете UserID=@ReturnCode вместо @ReturnCode =UserID.   -  person Bayeni    schedule 17.06.2014


Ответы (1)


это должно быть, как показано ниже, я думаю: -

SELECT @ReturnCode =UserID FROM tblMemberLogin WHERE LoginName = @LoginName AND LoginPassword = @Password;
person Neel    schedule 17.06.2014
comment
Ага, Неверный порядок - присвоение коду возврата (который не задан) полю (которое обратно не записывается). - person TomTom; 17.06.2014