【问题标题】:SQL Stored Procedure comparing NVARCHAR not working as expected比较 NVARCHAR 的 SQL 存储过程未按预期工作
【发布时间】:2014-06-17 13:06:22
【问题描述】:

我有以下 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 C# 存储过程中调用它,如下所示:

// 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 的架构如下:

用户 ID = 唯一标识符 pk, 登录名 = NVARCHAR(15) 登录密码 = NVARCHAR(15)

我在该表中有一行,用户名为myUser,密码为passw0rd

但是运行代码返回 0 行。手动运行存储过程也不起作用 - 运行如下查询:

SELECT UserID FROM tblMemberLogin WHERE LoginName = 'myUser' AND LoginPassword = 'passw0rd' 完美运行!请帮我找出哪里出错了。

【问题讨论】:

  • 请不要告诉我们您以纯文本形式存储密码 :(
  • 在 select 语句中,您分配的是 UserID=@ReturnCode 而不是 @ReturnCode =UserID。

标签: c# sql-server stored-procedures sql-server-2012-express


【解决方案1】:

我猜应该如下:-

SELECT @ReturnCode =UserID FROM tblMemberLogin WHERE LoginName = @LoginName AND LoginPassword = @Password;

【讨论】:

  • 是的,错误的顺序 - 将返回码(未设置)分配给字段(未写回)。
猜你喜欢
  • 2013-11-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-08
相关资源
最近更新 更多