2017-09-13 71 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(); 
}