在XmlSchemaValidationException上触发ValidationEventHandler时的数据库回滚

时间:2012-07-13 07:58:04

标签: .net exception-handling event-handling using

我有一个.xml文档,我正在解析并插入到事务中的数据库中。如果发现验证错误,我想回滚任何更改。由于文档可能很大,我使用XmlReaderSettingsValidationEventHandler

以下是摘录。我实例化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();
    }
}

然后我尝试捕获,并回滚任何异常。

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都将被正确处理
  • 该事务将在任何异常时回滚(如果连接设置为打开)

我错了吗?如果我是这样,我该如何修复代码呢?

0 个答案:

没有答案