【问题标题】:How to check SqlParameter is true with If如何使用 If 检查 SqlParameter 是否为真
【发布时间】:2023-03-07 06:21:02
【问题描述】:

我想在这样的 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/sql2 和 Boolean true/false?详细描述你想要达到的目标,而不是“我想要smth”。
  • 4.如果你的数据库是 MySQL,那么你需要MySqlConnection,MySqlCommand
  • 5.密码是vunerable,无需加密密码并检查数据库。请确保您的用户记录已使用加密密码插入/更新到数据库中。
  • 感谢您的 cmets,但我只需要如何检查任何语句的 sql1 或 sql2 是否正确。此代码是示例,不要关注其他故障。

标签: c# sql-server tsql


【解决方案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。现在应该可以工作了
猜你喜欢
  • 1970-01-01
  • 2013-08-11
  • 2011-12-04
  • 2022-07-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多