最近想用EF开发一个支持自定义查询简单工具
发现DataTable.Load() 不能从EntityDataReader读取
于是自己写了一个简单的 关键代码如下
public DataTable ExecuteQuery()
{
using (EntityConnection econn = new EntityConnection(SystemStatus.connectorStr))
{
string esql = @"SELECT p.name,p.posiCode FROM marcoleemisEntities.posis as p";
econn.Open();
using (EntityCommand ecmd = new EntityCommand(esql, econn))
{
using (EntityDataReader ereader =
ecmd.ExecuteReader(CommandBehavior.SingleResult | CommandBehavior.SequentialAccess))
{
DataTable tempTable = CreateTable(ereader);
ReadDataToTable(ereader, tempTable);
return tempTable;
}
}
//Console.WriteLine(ecmd.ToTraceString());
}
}
private static void ReadDataToTable(EntityDataReader ereader, DataTable tempTable)
{
//DataTable tab = ereader.GetSchemaTable();
while (ereader.Read())
{
object[] cells = new object[ereader.FieldCount];
ereader.GetValues(cells);
DataRow row = tempTable.NewRow();
row.ItemArray = cells;
tempTable.Rows.Add(row);
}
}
private static DataTable CreateTable(EntityDataReader ereader)
{
DataTable tempTable = new DataTable("QueryData");
for (int i = 0; i < ereader.FieldCount; i++)
{
tempTable.Columns.Add(ereader.GetName(i), ereader.GetFieldType(i));
}
return tempTable;
}