从UpdateDataSet返回错误

时间:2012-06-15 17:27:25

标签: c# database dataset prepared-statement enterprise-library

编辑:解决方案(种类)
所以,我所做的与我原本想做的事情几乎没有什么共同之处,但我的应用程序现在可以更快地运行很多(现在需要花费15分钟处理的DataSet会在30-40秒内完成TOPS)。这大致是我做的:
   - 阅读电子表格和通常填充DataTable / DataSet    - [HACK WARNING]我生成自己的SQL查询,而不是使用UpdateDataSet,主要是为每种类型的更新(例如String skeleton = "UPDATE ... SET ... WHERE ...")提供一个骨架字符串。然后,我查阅模板数据库,并用适当的条目替换占位符...    - [更多黑客警告]我处理错误的方法是手动检查是否会发生这些错误。所以如果我知道我要做插入,我会在实际插入之前运行一个错误检查命令;错误检查器将执行的操作是构造一个JOIN语句,检查用户的DataSet中的任何条目是否已存在于数据库中。只需执行JOIN命令,我就会得到一个带有结果的DataSet,所以我知道如果有什么,那就是错误。然后我可以继续打印它们。

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

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

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

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

请注意,我正在尝试避免使用存储过程。由于不同模板的数量在部署后会非常快速地增长,因此我必须尽可能远离手动编写的代码并接近数据库驱动的模型。

0 个答案:

没有答案