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

时间:2014-06-03 08:05:02

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

我为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;
    }

来自数据库控制器

    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;
    }

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

  • 我只是想知道,显然你的@Hash参数传递给了存储的 procedure是用户的密码。但由于某种原因你的WHERE子句 在程序中就是这样:
  

“WHERE batchName ='@ Name'AND productCode ='@ Hash '”

您的病情有可能不正确吗?我想它应该是这样的:Employee.password = @Hash

  • 你不应该把''围绕你的变量。否则你的比较是完全错误的。