基本信息

产品版本

000001

时间

2025.01.21

参与人员

蓝色幽灵

框架

XCode

范围

超多列的CSV,Excel自动导入数据库

背景与目标

1.背景

定位需求与问题

当前仍有各类数据上报任务是需要从企业数据库中提取数据,上级会发各种Excel表格或者要求导出CSV文件。

现遇到800以上列的CSV文件,要求导入数据库,做各种处理后,再次导出成CSV文件。

2.目标

将CSV文件一键导入各种数据库

前期分析

1.开发任务设计

1、面向用户为有数据库使用经验的信息部门。

2、可选择各种目标数据库,如oracle,Mssqlerver,Mysql,SQlite。

3、操作尽量简单。

4、能自动尽量不手动。

5、日志清晰,可记录在文本文件,方便查错。

2.使用框架/标准

  1. 采用具有十多年大数据处理经验的框架XCode数据中间件,聚焦于添删改查、性能和大数据,支持MySQL、SQLite、SqlServer、Oracle、Postgresql、TDengine、达梦、金仓、瀚高。
  2. 有C#开发经验丰富的团队成员必要条件
  3. 面向桌面开发,不对外使用非必要条件

3、开发过程和经验分享

1、采用了传统的c#+WinForm 框架为Net8.0。

2、按照用户习惯进行界面UI设计,先摆放各种组件。

3、几个技术点

3.1 表的动态创建

var table = dal.Tables?.FirstOrDefault(e => e.TableName.EqualIgnoreCase(tableName));
if (table == null)
{
    var ioc = ObjectContainer.Current;
    table = ioc.Resolve<IDataTable>();
    table.TableName = tableName;

    for (var i = 0; i < dt.Columns.Length; i++)
    {
        var dc = table.CreateColumn();

        dc.ColumnName = dt.Columns[i];
        dc.Name = dc.ColumnName;
        dc.DataType = dt.Types[i];
        dc.Length = 500;
        dc.Nullable = true;

        table.Columns.Add(dc);
    }

    dal.SetTables(table);
}

3.2 字段的类型判断

第一版就别判断了,直接全部字符串,500个够长了吧。后期再优化

3.3 Xcode中关于数据库中表的删除

dal.Db.CreateMetaData().SetSchema(DDLSchema.DropTable, table);

3.4 Xcode中插入数据语句的运用

dal.Session.Insert(table, columns.ToArray(), dt.Cast<IModel>());

3.5 CSV文件中列头与数据行的获取

using var csv = new CsvFile(fileName, true);
var headers = csv.ReadLine();
var csvRowsall = csv.ReadAll().ToList();
 var dt = new DbTable
 {
     Columns = new String[headerscount],
     Types = new Type[headerscount],
     Rows = new List<Object?[]>(),
 };
 for (var i = 0; i < headerscount; i++)
 {
     dt.Columns[i] = headers[i];
     dt.Types[i] = typeof(string);
 }
--加入数据
 for (var i = 0; i < linesCount; i++)
 {
     dt.Rows.Add(csvRowsall[i]);
 }

结论

Xcode有非常强劲的数据处理功能,这里可能只使用了1%。

由于是第一次写Winform,写了较多的冗余代码

实现了Csv,Excel与各种数据库的快速读写,完美实现心中所想。


新用户上手成本低

  • 属于一看就会
  • 一用就对

功能操作合理

  • UI简洁
  • 代码简洁
  • 扩展性强

帮助文档丰富

  • 帮助文档只有一个图

后续计划

后期看情况,扩展一些数据处理的功能,如指定SQL,导出指定数据