您的位置:首页 > 数据库

Entity Framework执行Sql语句返回DataTable

2015-11-17 17:00 375 查看
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;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: