如何使用 If 检查 SqlParameter 是不是为真

Posted

技术标签:

【中文标题】如何使用 If 检查 SqlParameter 是不是为真【英文标题】:How to check SqlParameter is true with If如何使用 If 检查 SqlParameter 是否为真 【发布时间】:2021-12-21 23:49:56 【问题描述】:

我想在这样的 if 语句中检查 sqlparameter 是否为真;

        string sql1 = "SELECT * FROM users WHERE mail=@mail and passwd is null";
        string sql2 = "SELECT * FROM users WHERE mail=@mail and passwd=@password";
        SqlParameter prm1 = new SqlParameter("mail", txtMail.Text.Trim());
        SqlParameter prm2 = new SqlParameter("password", txtPassword.Text.Trim());
        if (sql1 == true)
        
           
            MessageBox.Show("yes");
        
        else if (sql2 == true)
        
            MessageBox.Show("yes2");
        
        
            MessageBox.Show("no");
        

【问题讨论】:

注意:1. SQLParameter 中缺少 @ 前缀。 2. 您的查询没有执行,您需要SqlCommand 和提供的SqlConnection,查询,参数。 3. 需要.ExecuteScalar()返回查询结果的第一条记录。 您想比较 Strings sql1/sql2Boolean true/false?详细描述你想要达到的目标,而不是“我想要smth” 4.如果你的数据库是 mysql,那么你需要MySqlConnectionMySqlCommand 5.密码是vunerable,无需加密密码并检查数据库。请确保您的用户记录已使用加密密码插入/更新到数据库中。 感谢您的 cmets,但我只需要如何检查任何语句的 sql1 或 sql2 是否正确。此代码是示例,不要关注其他故障。 【参考方案1】:

目前还不清楚您要做什么,但看起来您可能想要这样的代码:

const string query = @"
SELECT CASE WHEN passwdHash is null THEN 1 ELSE 2 END
FROM users
WHERE mail = @mail and (passwdHash is null OR passwdHash = @passwdHash);
";
using (var conn = new SqlConnection(yourConnString))
using (var comm = new SqlCommand(query, conn))

    comm.Parameters.Add("@mail", SqlDbType.VarChar, 200).Value = txtMail.Text.Trim();
    comm.Parameters.Add("@passwordHash", SqlDbType.Binary, 32) = SaltAndHashPassword(txtPassword.Text.Trim());
    conn.Open();
    var result = comm.ExecuteScalar() as int?;
    conn.Close();
    if (result == 1)
    
        MessageBox.Show("yes");
    
    else if (result == 2)
    
        MessageBox.Show("yes2");
    
    else
    
        MessageBox.Show("no");
    

注意以下事项

using 阻止所有 Sql 对象 明确指定参数类型和长度 散列密码并进行比较 不要select *,只需传回带有结果的单列 在使用MessageBox 阻塞之前关闭连接

【讨论】:

谢谢,但我完全糊涂了。能不能简单点? 对我来说看起来很简单。你到底有什么困难? 我收到一个错误“CS0019 '==' 运算符不能应用于 'object' 和 'int' 类型的操作数” 它已经完成,但现在它正在工作,结果==1。 else if 或 else 给出错误“System.NullReferenceException:'对象引用未设置为对象的实例。'” 嗯,刚刚意识到如果你没有得到一行,那么结果是null而不是DBNull.Value。现在应该可以工作了

以上是关于如何使用 If 检查 SqlParameter 是不是为真的主要内容,如果未能解决你的问题,请参考以下文章

SqlParameter 多个参数动态拼接解决参数化问题

动态添加SqlParameter

动态添加SqlParameter

SqlParameter用法

C#中,求一个返回类型为DataTable,并用SqlParameter传参的SqlHelper

ASP.NET 中 SqlParameter是啥?具体怎么用?