XCode讀取Excel數據并適用于任何數據庫
作者:佚名
本文介紹的時XCode讀取Excel數據并適用于任何數據庫,詳細的介紹了Xcode讀取Excel數據庫的內容,先來看詳細內容。
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();
- }
- }
小結:XCode讀取Excel數據并適用于任何數據庫的內容介紹完了,希望本文對你有所幫助!
責任編輯:zhaolei
來源:
博客園




























