c# - 如何使用 If 检查 SqlParameter 是否为真
问题描述
我想在这样的 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");
}
解决方案
目前还不清楚您要做什么,但看起来您可能想要这样的代码:
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
推荐阅读
- c# - 在大文本文件中计算行数的最佳方法是什么?
- accessibility - 在网格内实现可访问性
- python - 自定义外部小部件不显示
- firebase - 为 Cloud Firestore 最大化每秒写入多少个分片?
- docker - RabbitMQ 节点因代理 Nginx 服务器而死
- c - 我从 i = 0 开始运行一个循环,但程序从 i = 2 开始
- ruby - 如何处理永不停止的shell命令
- bbedit - 如何让 BBedit 自动继续块评论?
- php - 即使我成功登录,为什么 Auth::user() 返回 null?
- flutter - 我想在 Flutter App 的 Listview 中显示我的 Json 数据