我先解释一下我的所作所为,然后我会说明问题所在。
我的应用程序通过(文件上传器)从经过身份验证的用户获取XML file
,然后我将存储在XML文件中的数据映射(我的意思是迁移)到我的数据库中的等效数据。
我通过LINQ
从XML文件中获取数据。
我的第一个问题
每个元素 XML文件具有等效实体 在我的数据库中。什么是最好的和 更高效的插入方式 一个以上的记录 具体表格并保证如果 数据有问题,回滚整个操作? 有一些如何做的例子 这个?你有什么建议吗? 验证XML数据?
我的第二个问题:
在第一个问题中,我谈到了 (INSERT)操作。如果 用户更改XML中的一些数据 文件,然后我想更新我的 数据库与新数据。我该怎么办? 做这个?我应该比较每一个 记录,或尝试插入,如果失败, 然后更新这条记录?
答案 0 :(得分:3)
XML文件中的每个元素都有一个 我数据库中的等效实体。什么 是最好的,更多的表现方式 在一个。中插入多个记录 特定的表。并保证是否存在 在数据中有些不对劲, 回滚整个操作。请 如果有一些样本可以做到这一点 有关验证的任何建议 XML数据。
这里的简单答案是:使用交易。事务的目的是为您提供一种机制,您可以通过该机制执行多个命令,然后将它们作为单个工作单元提交,或者将它们完全回滚,以便数据库处于一种状态,就好像您的操作从未发生过一样
在第一个我谈到的 (INSERT)操作,如果用户改变 然后我想要XML文件中的一些数据 使用新的更新我的数据库 data.how to o this。应该比较 每条记录。或者如果失败则尝试插入 然后更新这条记录?。
如果可以轻松避免,则尝试错误不同的重试模式不是理想的模式。您的SQL应该使用根据现有数据(例如SQL Server MERGE
命令)有条件地插入或更新的语句;我没有Informix经验,所以我不能说它支持的内容或如果MERGE
是ANSI SQL,或者您应该在SQL中自己执行此条件逻辑。
答案 1 :(得分:1)
为此使用informix存储过程。 这将允许您包含处理错误数据的异常处理。
然后,您可以先将所有实体加载到临时表中,比如t_work,如果有数据问题,则删除表格并引发一次删除。
BEGIN -- Start Exception Handling
ON EXCEPTION SET esql, eisam
DROP TABLE t_work;
RAISE EXCEPTION esql, eisam; -- rethrow the exception
END EXCEPTION
-- << Your logic here>>
请点击此处了解详情:http://www.pacs.tju.edu/informix/answers/english/docs/dbdk/infoshelf/sqlt/14.toc.html#540217