一小段 EntityReader To DataTable

最近想用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;
        }
posted @ 2012-05-12 12:34  bikaqiou2000  阅读(1076)  评论(0编辑  收藏  举报