XCode讀取Excel數(shù)據(jù)并適用于任何數(shù)據(jù)庫
XCode讀取Excel數(shù)據(jù)并適用于任何數(shù)據(jù)庫是本文要介紹的內(nèi)容,不多說,直接進(jìn)入話題。雖然是充血模型,雖然是強(qiáng)類型,XCode同樣支持遍歷任何數(shù)據(jù)庫結(jié)構(gòu),并以強(qiáng)類型(相對于DataSet等字典訪問)方式讀取數(shù)據(jù)。
要遍歷數(shù)據(jù)庫結(jié)構(gòu)是很容易的事情,絕大多數(shù)Orm都支持。
但是在沒有實(shí)體類的情況下以強(qiáng)類型方式讀取數(shù)據(jù),就稍微有些復(fù)雜。XCode的原理是為每張表動態(tài)創(chuàng)建繼承自Entity<>的實(shí)體類,然后通過接口來操作實(shí)體類。
代碼中有了快速反射,雖然沒有性能損耗,但是用起來挺別扭的,這里說明了XCode對于實(shí)體類元數(shù)據(jù)的動態(tài)訪問支持還不夠。
- // 添加一個連接
- 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);
- // 創(chuàng)建一個實(shí)體操作者,這里會為數(shù)據(jù)表動態(tài)生成一個實(shí)體類,并使用CodeDom編譯
- IEntityOperate op = dal.CreateOperate(table.Name.Replace("$", null));
- // 因?yàn)閯討B(tài)生成代碼的缺陷,表名中的$已經(jīng)被去掉,并且Excel的查詢總必須給表名加上方括號,還是因?yàn)橛?
- // 下面通過快速反射設(shè)置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();
- // 查找所有數(shù)據(jù)
- EntityList<IEntity> list = op.FindAll();
- //DataSet ds = list.ToDataSet();
- // 輸出數(shù)據(jù)
- 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();
- }
- }
小結(jié):XCode讀取Excel數(shù)據(jù)并適用于任何數(shù)據(jù)庫的內(nèi)容介紹完了,希望本文對你有所幫助!