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;
}
}
