2011-06-21 29 views
1

まず最初に私が何をしているのかを説明し、問題がどこにあるのかを指定します。一度に同じテーブルに複数の挿入操作を行う場合

私のアプリケーションは、認証されたユーザーから(ファイルアップローダ)XML fileを取得した後、XMLファイルに格納されたデータをデータベース内の同等のものにマップします。 XMLファイルからLINQまでのデータを取得します。

  • での私の最初の質問

    各要素は、XMLファイルには、私のデータベースに同等のエンティティ を持っています。何が最高ですか 複数のレコードを の特定のテーブルに挿入し、データに何か問題がある場合は、全体の操作をロールバックするようにしてください。 これを行うにはいくつかの例がありますか? XMLデータの検証に関する提案はありますか?

  • 私の2番目の質問:最初の質問で

    、私は (INSERT)の動作について話しています。 ユーザーがXML ファイルの一部のデータを変更した場合、 データベースを新しいデータで更新したいとします。どうすればいいですか これはどうですか?それぞれ レコードを比較するか、挿入しようとすると、失敗した場合は がこのレコードを更新しますか?

+0

はなぜ否決、あなたは問題を理解していない場合、私は、私はdownvoteなかった –

+0

多くを説明しますが、それはあなたのその」事実から来るかもしれませんここで2つの無関係な質問をしています。 1つの答えはもう1つの答えとは関係がないので、個々の質問に分割する方が良いでしょう。 –

+0

ええ、私は同じアプリケーションの2つの問題に直面しています。私は全体の問題を説明したいと思います。まったく気にしないでください。 –

答えて

3

XMLファイル内の各要素は、私のデータベースに 同等のエンティティを持っています。行うにはいくつかのサンプルがあれば最高のデータではいくつかのこと間違って ある場合 特定のテーブル内の複数のレコードを挿入するために、よりパフォーマンスの道 が保証.AND、 ロールバックは全体の動作は をしなさい何 されますthis.and XMLデータの検証に関する提案。

ここでの簡単な答えは、トランザクションを使用することです。トランザクションのポイントは、複数のコマンドを実行し、それらを1つの作業単位としてコミットするか、完全にロールバックするメカニズムを提供することで、データベースが操作が行われなかったかのような状態。 XMLファイル内のデータの一部が、私はこのOに新しい data.howと私のデータベースを更新するために をしたいユーザーの変更 場合、私は、 (INSERT)の動作について話す最初のもので

私は と各レコードを比較してください。失敗した場合は挿入してください このレコードを更新しますか?

try-error-differentリトライパターンは、簡単に回避できれば望ましいものではありません。SQLは、既存のデータ(SQL Server MERGEコマンドなど)に応じて条件付きで挿入または更新するように設計されたステートメントを使用する必要があります。Informixの経験がないため、サポート対象の言語には対応できません。または、MERGEがANSI SQL)、またはこの条件ロジックをSQL内で自分で実行する必要があります。

+0

ありがとう、私はトランザクションについて考えていますが、私は毎回(挿入)操作の数を知らない。これを行う方法。 –

+1

@just_name:それは問題ではありません。トランザクション内で必要なだけ多くの操作を実行できます。トランザクションを開始し、コマンドを実行し(何があってもいくつあるか)、トランザクションをコミットまたはロールバックします。 –

+0

hmmm、ありがとう、これは問題ではない、私はどのように私のアプリケーションで使用されるように一般的なトランザクションメソッドを作成すると思います..私は各エンティティに挿入するレコードの数がわからないたびにこの保証付きで複数のレコードを挿入する方法。一つを書き、多くを使用する。 –

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

関連する問題