Entity Framework执行Sql语句返回DataTable

来源:互联网 发布:只有我知在哪里可以看 编辑:程序博客网 时间:2024/05/16 11:29

Entity Framework中对外开放了数据库连接字符串,使用的时候可以直接得到这个连接字符串,然后进行相关的操作。如果在使用的过程中,发现Entity Framework中有一些满足不了的需求的话,那么就可以用这个连接字符串,自己写ADO的代码,去数据库进行相关的操作。特别是对于一些复杂的查询,这时候,一般是想直接执行一个Sql语句,返回一个结果集。下面是一个方法,直接返回DataTable。

  1. /// <summary>  
  2. /// EF SQL 语句返回 dataTable  
  3. /// </summary>  
  4. /// <param name="db"></param>  
  5. /// <param name="sql"></param>  
  6. /// <param name="parameters"></param>  
  7. /// <returns></returns>  
  8. public static DataTable SqlQueryForDataTatable(this Database db,  
  9. string sql,  
  10. SqlParameter[] parameters)  
  11. {  
  12. SqlConnection conn = new System.Data.SqlClient.SqlConnection();  
  13. conn.ConnectionString = db.Connection.ConnectionString;  
  14. if (conn.State != ConnectionState.Open)  
  15. {  
  16. conn.Open();  
  17. }  
  18. SqlCommand cmd = new SqlCommand();  
  19. cmd.Connection = conn;  
  20. cmd.CommandText = sql;  
  21. if (parameters.Length > 0)  
  22. {  
  23. foreach (var item in parameters)  
  24. {  
  25. cmd.Parameters.Add(item);  
  26. }  
  27. }  
  28. SqlDataAdapter adapter = new SqlDataAdapter(cmd);  
  29. DataTable table = new DataTable();  
  30. adapter.Fill(table);  
  31. return table;  

然后调用的时候,直接传入Context的Database进去,就可以了。

方法二、写成类的扩展方法

[csharp] view plain copy
 print?
  1. public static class DbExtend  
  2.    {  
  3.        public static DataTable Select_Table_Info(this DbEntities model, string sql, SqlParameter[] parameters)  
  4.        {  
  5.            SqlConnection conn = new System.Data.SqlClient.SqlConnection();  
  6.            conn.ConnectionString = model.Database.Connection.ConnectionString;  
  7.            if (conn.State != ConnectionState.Open)  
  8.            {  
  9.                conn.Open();  
  10.            }  
  11.            SqlCommand cmd = new SqlCommand();  
  12.            cmd.Connection = conn;  
  13.            cmd.CommandText = sql;  
  14.            if(parameters !=null && parameters.Length >0)  
  15.                foreach (var item in parameters)  
  16.                {  
  17.                    cmd.Parameters.Add(item);  
  18.                }  
  19.            SqlDataAdapter adapter = new SqlDataAdapter(cmd);  
  20.            DataTable table = new DataTable();  
  21.            adapter.Fill(table);  
  22.            return table;  
  23.        }  
  24.    }  


0 0
原创粉丝点击