XCode讀取Excel數據(適用于任何數據庫)
雖然是充血模型,雖然是強類型,XCode同樣支持遍歷任何數據庫結構,并以強類型(相對于DataSet等字典訪問)方式讀取數據。
要遍歷數據庫結構是很容易的事情,絕大多數Orm都支持。
但是在沒有實體類的情況下以強類型方式讀取數據,就稍微有些復雜。XCode的原理是為每張表動態創建繼承自Entity<>的實體類,然后通過接口來操作實體類。
代碼中有了快速反射,雖然沒有性能損耗,但是用起來挺別扭的,這里說明了XCode對于實體類元數據的動態訪問支持還不夠。
// 添加一個連接 DAL.AddConnStr("test", "Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=Test.xls;" + "Extended Properties=Excel 8.0;", null, null); DAL dal = DAL.Create("test"); // 遍歷所有表 foreach (XTable table in dal.Tables) { Console.WriteLine("表 {0}:", table.Name); // 創建一個實體操作者,這里會為數據表動態生成一個實體類,并使用CodeDom編譯 IEntityOperate op = dal.CreateOperate(table.Name.Replace("$", null)); // 因為動態生成代碼的缺陷,表名中的$已經被去掉,并且Excel的查詢總必須給表名加上方括號,還是因為有$ // 下面通過快速反射設置Meta.TableName Type type = op.GetType(); type = typeof(Entity<>.Meta).MakeGenericType(type); PropertyInfoX.Create(type, "TableName").SetValue("[" + table.Name + "]"); // 如果沒有記錄,跳過 if (op.FindCount() < 1) continue; // 輸出表頭 foreach (FieldItem item in op.Fields) { if (item.Name.StartsWith("F")) break; Console.Write("{0}\t", item.Name); } Console.WriteLine(); // 查找所有數據 EntityList<IEntity> list = op.FindAll(); //DataSet ds = list.ToDataSet(); // 輸出數據 foreach (IEntity entity in list) { foreach (FieldItem item in op.Fields) { if (item.Name.StartsWith("F")) break; Console.Write("{0}\t", entity[item.Name]); } Console.WriteLine(); } }
我不相信神話,我只相信汗水!我不相信命運,我只相信雙手!

浙公網安備 33010602011771號