一次在同一个表中进行多个插入操作

时间:2011-06-21 16:09:16

标签: c# asp.net xml performance informix

我先解释一下我的所作所为,然后我会说明问题所在。

我的应用程序通过(文件上传器)从经过身份验证的用户获取XML file,然后我将存储在XML文件中的数据映射(我的意思是迁移)到我的数据库中的等效数据。 我通过LINQ从XML文件中获取数据。

  • 我的第一个问题

    每个元素 XML文件具有等效实体 在我的数据库中。什么是最好的和 更高效的插入方式 一个以上的记录 具体表格并保证如果 数据有问题,回滚整个操作? 有一些如何做的例子 这个?你有什么建议吗? 验证XML数据?

  • 我的第二个问题:

    在第一个问题中,我谈到了 (INSERT)操作。如果 用户更改XML中的一些数据 文件,然后我想更新我的 数据库与新数据。我该怎么办? 做这个?我应该比较每一个 记录,或尝试插入,如果失败, 然后更新这条记录?

2 个答案:

答案 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