存储过程/查询两个变量比较
本文关键字:两个 变量 比较 查询 存储过程 | 更新日期: 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
- 你不应该在变量周围加上"。否则你的比较是完全错误的。