新用户上手成本低
- 属于一看就会
- 一用就对
功能操作合理
- UI简洁
- 代码简洁
- 扩展性强
帮助文档丰富
- 帮助文档只有一个图
产品版本 | 000001 | 时间 | 2025.01.21 |
参与人员 | 蓝色幽灵 | 框架 | XCode |
范围 | 超多列的CSV,Excel自动导入数据库 |
定位需求与问题
当前仍有各类数据上报任务是需要从企业数据库中提取数据,上级会发各种Excel表格或者要求导出CSV文件。
现遇到800以上列的CSV文件,要求导入数据库,做各种处理后,再次导出成CSV文件。
将CSV文件一键导入各种数据库
1、面向用户为有数据库使用经验的信息部门。
2、可选择各种目标数据库,如oracle,Mssqlerver,Mysql,SQlite。
3、操作尽量简单。
4、能自动尽量不手动。
5、日志清晰,可记录在文本文件,方便查错。
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与各种数据库的快速读写,完美实现心中所想。
后期看情况,扩展一些数据处理的功能,如指定SQL,导出指定数据