查询与电子邮件地址不匹配

时间:2018-01-12 00:24:48

标签: c# sql entity-framework

我有以下查询在SSMS中正常工作:

SELECT ClientID FROM xxx.ClientUsers WHERE UserName = 'user@email.com'

它将为ClientID返回单个整数值(ClientID和UserName是PK)。

如果我在控制器中尝试相同的查询,则无法返回结果。我已确认表中存在User.Identity.Name。即使使用硬编码的电子邮件地址,也不会返回数据。

var iTemp = -1;
iTemp = db.Database.SqlQuery<int>(@"SELECT ClientID FROM xxx.ClientUsers WHERE 
UserName = '" + User.Identity.Name + "'").First();

上面的代码不返回任何行。

2 个答案:

答案 0 :(得分:1)

如果您正在使用带有实体框架的原始SQL查询,请确保使用正确的参数化并避免容易受到SQL注入:

var iTemp = db.Database.ExecuteSqlCommand(
    @"SELECT ClientID FROM xxx.ClientUsers WHERE UserName = @UserName", 
    new SqlParameter("UserName", User.Identity.Name)).FirstOrDefault();

甚至更好,你可以使用LINQ:

var result = db.ClientUsers.Where(x => x.UserName == User.Identity.Name).FirstOrDefault(); 
if(result != null)
{
    var clientId = result.ClientID;
}

答案 1 :(得分:0)

现在删除的答案中的代码在退出并重新加载项目后起作用。不确定发生了什么,或者我可能做了什么?无论如何,谢谢大家的帮助!至少我学会了一种更好的方法来执行查询。

var result = db.ClientUsers.Where(x => x.UserName == User.Identity.Name).First().ClientID;