Entity Framework执行Sql语句返回DataTable

来源:互联网 发布:创世写作 mac 编辑:程序博客网 时间:2024/05/16 07:38

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

/// <summary>/// EF SQL 语句返回 dataTable/// </summary>/// <param name="db"></param>/// <param name="sql"></param>/// <param name="parameters"></param>/// <returns></returns>public static DataTable SqlQueryForDataTatable(this Database db,string sql,SqlParameter[] parameters){SqlConnection conn = new System.Data.SqlClient.SqlConnection();conn.ConnectionString = db.Connection.ConnectionString;if (conn.State != ConnectionState.Open){conn.Open();}SqlCommand cmd = new SqlCommand();cmd.Connection = conn;cmd.CommandText = sql;if (parameters.Length > 0){foreach (var item in parameters){cmd.Parameters.Add(item);}}SqlDataAdapter adapter = new SqlDataAdapter(cmd);DataTable table = new DataTable();adapter.Fill(table);return table;}

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

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

 public static class DbExtend    {        public static DataTable Select_Table_Info(this DbEntities model, string sql, SqlParameter[] parameters)        {            SqlConnection conn = new System.Data.SqlClient.SqlConnection();            conn.ConnectionString = model.Database.Connection.ConnectionString;            if (conn.State != ConnectionState.Open)            {                conn.Open();            }            SqlCommand cmd = new SqlCommand();            cmd.Connection = conn;            cmd.CommandText = sql;            if(parameters !=null && parameters.Length >0)                foreach (var item in parameters)                {                    cmd.Parameters.Add(item);                }            SqlDataAdapter adapter = new SqlDataAdapter(cmd);            DataTable table = new DataTable();            adapter.Fill(table);            return table;        }    }


0 0
原创粉丝点击