我正在 asp.net 中登录。从数据库中获取用户的查询总是返回一个空集,即使应该返回一行也是如此。
我在 C# 中使用 Connector/NET
我有通过这样声明的电子邮件获取用户的查询:
select * from users where email = '@email';
在数据库中我有两行:test1@example.com 和 test2@example.com
我的代码如下所示:
UserByEmail 是一个带有上述查询的字符串。
MySqlCommand query = new MySqlCommand(UserByEmail, db);
db.Open();
query.Parameters.AddWithValue("@email", email);
MySqlDataReader reader = query.ExecuteReader();
if(reader.Read()){
/* Do stuff */
}
db.Close();
当我像这样对任何测试用例运行它时,属性 reader.HasRows
总是返回 false。我已将查询直接更改为:
- select * from users;
- select * from users where email = 'test1@example.com';
对于他们两个,都有后面的行。所以问题是当我使用参数 @email 和 query.Parameters.AddWithValue("@email", email);
时。
知道这里发生了什么吗?我一直在寻找这个问题,但一无所获。该代码与文档示例中的代码几乎相同 ( Connector/NET Tutorials: Parameters )
最佳答案
从 '@email'
的两侧删除 '
,因为 addwith 值会在必要时添加它:
string query = "select * from users where email = @email"
顺便说一下,最好使用Parameters.Add()
,而不是Parameters.AddWithValue()
:
command.Parameters.Add("@email", SqlDbType.VarChar).Value = email;
关于c# - .Net C# 连接器/NET 查询参数不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53549033/