0

编辑:解决方案(有点)
所以,我所做的与我最初想做的几乎没有共同之处,但我的应用程序现在运行更快(处理时间超过 15 分钟的数据集现在在 30-40 秒内完成最高额)。这大致是我所做的:
- 阅读电子表格并填充DataTable/DataSet正常
- [HACK WARNING] 我没有使用 UpdateDataSet,而是生成自己的 SQL 查询,主要是通过为每种类型的更新(例如String skeleton = "UPDATE ... SET ... WHERE ...")生成一个框架字符串。然后我查阅模板数据库并用...适当的条目替换占位符。
- [更多黑客警告] 我处理错误的方式是手动检查这些错误是否会发生。因此,如果我知道我将要进行插入,我将在实际插入之前运行一个错误检查命令;错误检查器将做的是构造一个 JOIN 语句,检查用户的 DataSet 中的任何条目是否已经存在于数据库中。只需执行 JOIN 命令,我就会返回一个带有结果的 DataSet,所以我知道如果那里有任何东西,那就是错误。然后我可以继续打印它们。

如果有人需要更多详细信息,我很乐意提供。这是一个相当具体的问题,所以我应该把这个大纲保持在相当高的水平。

原始问题
出于我无法控制的(好的)原因,我需要使用Database.UpdateDataSet()Microsoft 企业库中的方法。我的项目的工作方式是,我让用户通过将 Excel 电子表格上传到 Web 应用程序来更改数据库(多个数据库、多个模式、多个表,但始终一次只有一个)。电子表格遵循我(通常)指定的设计/模板。我的状态是阅读电子表格,将其转换为 DataTable/DataSet,并使用(动态生成的)准备好的语句对数据库进行适当的更改。这是问题所在:

每个电子表格只允许一种类型的更改(插入/更新/删除)。我想这样做,如果用户上传了一个插入电子表格,但是数据库中已经有几个(比如说 10 个)条目,我不仅返回一个错误,而且告诉他们哪些条目(DataRows)违反了主要关键约束。

想法解决方案是获取一个带有错误列表的 DataSet,但我不知道该怎么做。也许有一种方法可以构造准备好的语句,如果要插入 DataRow(按照上面的示例),它会正常进行;但是,如果它尝试更新或删除,它会跳过它并将其添加到某种错误集合中?

请注意,我试图避免使用存储过程。由于部署后不同模板的数量会增长得非常快,所以我尽量远离手动编写代码,尽可能接近数据库驱动模型,这一点很重要。

4

0 回答 0