sql命令参数不生效

Parameter does not take effect for sql command

我正在尝试为我的项目使用参数,但不知为何它没有 return 输出。请在下面查看我的代码。

SqlCommand zSqlComm = new SqlCommand("SELECT * FROM tblAppUsers WHERE Username = @Username AND PasswordHash = HASHBYTES('SHA2_512', @Password)");
zSqlComm.CommandType = CommandType.Text;
zSqlComm.Parameters.AddWithValue("@Username", "admin");
zSqlComm.Parameters.AddWithValue("@Password", "admin");
return DatabaseDAL.ExecuteSelect(zSqlComm);

但是,如果我尝试使用它,它 return 是数据集中的一个值:

SqlCommand zSqlComm = new SqlCommand(
  "SELECT * FROM tblAppUsers WHERE Username = 'admin' AND PasswordHash = HASHBYTES('SHA2_512', 'admin')"
);

请看我的ExecuteSelect代码:

public static DataTable ExecuteSelect (SqlCommand zSQLComm)
{
    DataTable zDataTable = new DataTable();
    SqlConnection zSQLConn = new SqlConnection(DatabaseConfiguration.ZSQLConnectionString);
    zSQLComm.Connection = zSQLConn;
    SqlDataAdapter zSQLDataAdapter = new SqlDataAdapter(zSQLComm);
    try
    {
        zSQLConn.Open();
        zSQLDataAdapter.Fill(zDataTable);    
        zSQLConn.Close();
    }
    catch
    {
        zSQLConn.Close();
    }

    return zDataTable;
}

我也尝试删除 CommandText 中参数中的单引号,但它仍然没有 return 任何输出。

你可以通过MS SQL服务器查看,直接传递字符串和传递变量给HASHBYTES函数的结果是不同的:

declare @Password nvarchar(50)
set @Password = 'admin'
select HASHBYTES('SHA2_512', 'admin')
select HASHBYTES('SHA2_512', @Password)

所以尝试传递带有类型的参数:

zSqlComm.Parameters.Add("@Password", SqlDbType.NVarChar, 100).Value = "admin";