2017-09-13 24 views
0

该项目使用ASP.NET MVC编码在c#中。实体框架查询 - 必须声明标量变量

你好,我用Entity Framework创建了数据库并添加了一些数据。现在我想获取这些数据并将其放入变量中。

这是我如何获取数据和它的工作:

string hash = db.Database.SqlQuery<string>("Select PasswordHash From Users where Username = 'Paul'").FirstOrDefault<string>(); 

当我想要把变量插入查询这样的:

string hash = db.Database.SqlQuery<string>("Select PasswordHash From Users where Username = @username").FirstOrDefault<string>(); 

它不工作,错误消息说:

'必须声明标量变量 “@用户名”。'

是否有任何方式来获取与变量内部查询与实体框架的数据?

我读了如何通过添加parameteres像标准的SQL连接做到这一点:

cmd.Parameters.Add("@username", SqlDbType.VarChar).Value = username; 

感谢您的帮助。

+0

你有阅读文档:https://msdn.microsoft.com/en-us/library/jj592907(v=vs。 113).aspx – Jamiec

回答

0

用同样的方法,创建SQL参数,并附上查询像

var parameters = new List<SqlParameter> { 
    new SqlParameter("@username", username) 
}; 
string query = "Select PasswordHash From Users where Username = @username"; 

string hash = db.Database.SqlQuery<string>(query, parameters.ToArray()).FirstOrDefault<string>(); 
+0

谢谢,一切正常。 –

0

数据库认为@username是一个变量,这就是为什么你会得到该错误消息。你可以,你所说的,使用参数,并用它的值代替参数。参数传递给你用作数组的方法。

1

SqlQuery有另一个重载允许您将数据传递到查询的方法。

this

(从MSDN)例:

using (var context = new BloggingContext()) 
{ 
    var blogId = 1; 

    var blogs = context.Blogs.SqlQuery("dbo.GetBlogById @p0", blogId).Single(); 
}