如何使用 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
/sql2
和 Boolean true
/false
?详细描述你想要达到的目标,而不是“我想要smth”。
4.如果你的数据库是 mysql,那么你需要MySqlConnection
,MySqlCommand
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 是不是为真的主要内容,如果未能解决你的问题,请参考以下文章