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();
    }
}

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

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