0

.xmlトランザクションで解析してデータベースに挿入するドキュメントがあります。検証エラーが見つかった場合は、変更をロールバックしたいと思います。ドキュメントが大きくなる可能性があるため、 と を使用XmlReaderSettingsしていValidationEventHandlerます。

ここにスニペットがあります。をインスタンス化XmlReaderSettingsして添付しValidationEventHandlerます。

settings.ValidationEventHandler += new System.Xml.Schema.ValidationEventHandler(ValidationEventHandler);


private void ValidationEventHandler(object sender, ValidationEventArgs e)
{
    if (e.Severity == XmlSeverityType.Error)
    {
        throw new XmlSchemaValidationException();
    }
}

次に、try-catch を実行し、例外があればロールバックします。

using (OracleConnection conn = new OracleConnection(connectionString))
{
    conn.Open();
    using (OracleCommand command = conn.CreateCommand())
    {
        using (OracleTransaction trans = oracleConnection.BeginTransaction(IsolationLevel.ReadCommitted))
        {
            try
            {    
                conn.Transaction = trans;
                using (XmlReader xmlReader = XmlReader.Create(stream, settings))
                {
                    // parsing
                }
             }
             catch (Exception ex)
             {
                trans.Rollback();
             }
         }
    }
}

私はそれを期待しています:

  • 例外が発生した場合でも、接続、トランザクション、コマンド、および xmlreader はすべて適切に破棄されます。
  • 例外が発生すると、トランザクションはロールバックされます (接続が開かれた場合)。

私が間違っている?私がそうである場合、どうすればコードを修正できますか?

4

0 に答える 0