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(); } }
如果您觉得阅读本文对您有帮助,请点一下“推荐”按钮,您的“推荐”将是我最大的写作动力!欢迎各位转载,但是未经作者本人同意,转载文章之后必须在文章页面明显位置给出作者和原文连接,否则保留追究法律责任的权利。
我不相信神话,我只相信汗水!我不相信命运,我只相信双手!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· 展开说说关于C#中ORM框架的用法!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?