ExecuteSqlCommand為執行命令的接口, SqlQuery 為返回查詢結果
1、Database.ExecuteSqlCommand 方法 (String, Object[])
對數據庫執行給定的 DDL/DML 命令。 與接受 SQL 的任何 API 一樣,對任何用戶輸入進行參數化以便避免 SQL 注入攻擊是十分重要的。 您可以在 SQL 查詢字符串中包含參數占位符,然后將參數值作為附加參數提供。 您提供的任何參數值都將自動轉換為 DbParameter。context.Database.ExecuteSqlCommand("UPDATE dbo.Posts SET Rating = 5 WHERE Author = @p0", userSuppliedAuthor); 或者,您還可以構造一個 DbParameter 並將它提供給 SqlQuery。 這允許您在 SQL 查詢字符串中使用命名參數。 context.Database.ExecuteSqlCommand("UPDATE dbo.Posts SET Rating = 5 WHERE Author = @author", new SqlParameter("@author", userSuppliedAuthor));
2、Database.SqlQuery 方法 (Type, String, Object[])
創建一個原始 SQL 查詢,該查詢將返回給定類型的元素。 類型可以是包含與從查詢返回的列名匹配的屬性的任何類型,也可以是簡單的基元類型。 該類型不必是實體類型。 即使返回對象的類型是實體類型,上下文也決不會跟蹤此查詢的結果。 使用 SqlQuery(String, Object[]) 方法可返回上下文跟蹤的實體。 與接受 SQL 的任何 API 一樣,對任何用戶輸入進行參數化以便避免 SQL 注入攻擊是十分重要的。 您可以在 SQL 查詢字符串中包含參數占位符,然后將參數值作為附加參數提供。 您提供的任何參數值都將自動轉換為 DbParameter。 context.Database.SqlQuery(typeof(Post), "SELECT * FROM dbo.Posts WHERE Author = @p0", userSuppliedAuthor); 或者,您還可以構造一個 DbParameter 並將它提供給 SqlQuery。 這允許您在 SQL 查詢字符串中使用命名參數。 context.Database.SqlQuery(typeof(Post), "SELECT * FROM dbo.Posts WHERE Author = @author", new SqlParameter("@author", userSuppliedAuthor));
實例:
1 var stu = dbContext.Student.FirstOrDefault<Student>(t => t.Id == 1); 2 3 var list2 = from a in dbContext.Student 4 join b in dbContext.Course 5 on a.Id equals b.StudentId 6 where a.Id == 1 7 select new { a.Name, a.Sex, a.Aage, b.CourseName }; 8 gridView.DataSource = list2.ToList(); 9 gridView.DataBind(); 10 11 var cnt = dbContext.Database.ExecuteSqlCommand("update student set name=@name where id = @id", new SqlParameter[] { 12 new SqlParameter("@id", 10), 13 new SqlParameter("@name","學生姓名") });//執行更新操作 14 15 var res = dbContext.Database.SqlQuery<Student2>("select Id,name from student where id=@id", new SqlParameter[] { 16 new SqlParameter("@id",10) }); 17 //返回數據 18 //var res = dbContext.Database.SqlQuery<Student2>("select Id,name from student where id=@id", new SqlParameter("@id", 10)); 19 gridView.DataSource = res.ToList(); 20 gridView.DataBind();
ps:Student2不一定為映射的實體對象,可以為自定義其他對象,但實體對象的屬性數量必須多余或等於SqlQuery查詢語句中查詢返回的列數量。
參考:
https://msdn.microsoft.com/zh-cn/library/system.data.entity.database.aspx