我正在优化一些从以前员工的代码库中分配的代码。除了代码非常“意大利面条”这一事实之外,我确实遇到了一个我不确定如何正确优化的问题。
下面的片段不是一个精确的复制,但应该很好地详细说明这个问题。
他正在服用一个DataTable
从 Excel 电子表格中提取行并将行放入格式一致的 DataTable 中,该 DataTable 稍后会更新数据库。这对我来说似乎是合乎逻辑的,然而,他复制数据的方式似乎很复杂,修改、维护或添加新格式非常痛苦。
这是我所看到的:
private void VendorFormatOne()
{
//dtSumbit is declared with it's column schema elsewhere
for (int i = 0; i < dtFromExcelFile.Rows.Count; i++)
{
dtSubmit.Rows.Add(i);
dtSubmit.Rows[i]["reference_no"] = dtFromExcelFile.Rows[i]["VENDOR REF"];
dtSubmit.Rows[i]["customer_name"] = dtFromExcelFile.Rows[i]["END USER ID"];
//etc etc etc
}
}
对我来说,将列映射到不同的模式是完全过分的,但我想不出一种更优雅的方法。在实际的解决方案中,大约有 20 种这样的方法,都使用了与
dtFromExcelFile
不同的格式。并且列列表要长得多。 dtSubmit
的列架构全面保持不变。我正在寻找一种方法来避免每次公司需要从供应商处加载新文件时都必须手动映射这些列。有没有办法更有效地做到这一点?我确定我在这里忽略了一些东西,但没有在 SO 或其他地方找到任何相关答案。
最佳答案
这可能有点矫枉过正,但您可以定义一个 XML 文件来描述哪个 Excel 列映射到哪个数据库字段,然后将其与每个新的 Excel 文件一起输入。您可能需要创建一两个类来解析和使用该文件,并且可能还需要创建另一个类来根据 XML 文件验证 Excel 文件。
根据您组织的规模,这可能会给您带来额外的好处,即能够将繁琐的映射卸载给技能较低的人。但是,这是相当多的设置工作,如果这种情况很少发生,您可能不会因为创建如此多的基础设施而获得可观的投资返回。
或者,如果您使用的是 MS SQL Server,这基本上是 SSIS是为,尽管根据我的经验,大多数程序员发现 SSIS 相当乏味。
关于c# - 使用不同的列模式将行从 DataTable 复制到另一个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20894002/