存储过程/查询两个变量比较

本文关键字:两个 变量 比较 查询 存储过程 | 更新日期: 2023-09-27 18:06:27

我已经为SQL Server 2014创建了一个存储过程。

有两个参数:Name是用户名,Hash是密码md5哈希值。我检查数据库中md5哈希值是否相等(第一个哈希值来自程序,第二个哈希值已经存储在数据库中)。

如果我只是在数据库中运行查询(不是存储过程)(或在使用commandType.Text的程序中)-一切都有效并且用户正在被选择,但是当我运行确切的事情但使用存储过程时,c#中的SqlReader没有返回元素,这很可能意味着这些变量比较期间的条件未满足。

也许我做错了什么?

我还有大约10个其他存储过程用于读取或/和写入数据库,除了这个之外,其他都可以工作。

步骤如下:

CREATE PROCEDURE GetHash
   @Name nvarchar(50),
   @Hash nvarchar(200)
AS
BEGIN
    SET NOCOUNT ON;
    SELECT Orders.orderId, Employee.name, Employee.surname
    FROM Orders 
    LEFT JOIN Employee ON Orders.orderId = Employee.id
    WHERE batchName = '@Name' AND productCode = '@Hash'
END
GO

代码部分:

    public Boolean VerifyPassword(string name, string password)
    {
        var paramsList = new List<SqlParameter> { new SqlParameter("@Name", name), new SqlParameter("@Hash", GetMd5Hash(password)) };
        const string ProcedureName = "GetHash";
        var ActiveUser = new DBController().GetFromDatabase(ProcedureName, "Login", "EJL15_DB", paramsList).ToList();
        return ActiveUser.Count > 0;
    }

And from Database Controller

    private void SetCommandProperties(string procedureName, IEnumerable<SqlParameter> paramsList)
    {
        this.sqlCommand.CommandText = procedureName;
        this.sqlCommand.CommandType = CommandType.StoredProcedure;
        foreach (var curParam in paramsList)
            this.sqlCommand.Parameters.Add(curParam);
        this.sqlCommand.CommandTimeout = 15;
    }

存储过程/查询两个变量比较

不需要在存储过程中引用参数。这样做:

CREATE PROCEDURE GetHash
    @Name nvarchar(50),
    @Hash nvarchar(200)
AS
BEGIN
    SET NOCOUNT ON;
    SELECT Orders.orderId, 
           Employee.name, 
           Employee.surname
    FROM Orders 
    LEFT JOIN Employee
        ON Orders.orderId=Employee.id
    WHERE batchName = @Name
    AND productCode = @Hash
END
  • 我只是想知道,显然你的@Hash参数传递到存储"步骤"为用户的密码。但是由于某些原因,你的WHERE子句步骤如下:

" batchName = @ name和 productCode ="@Hash 的"

你的情况有可能是不正确的吗?我想应该是这样的:雇员。password = @Hash

  • 你不应该在变量周围加上"。否则你的比较是完全错误的。