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資料並適用於任何資料庫的內容介紹完了,希望本文對你有所協助!