Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 在XmlSchemaValidationException上激发ValidationEventHandler时数据库回滚_.net_Exception Handling_Event Handling_Using - Fatal编程技术网

.net 在XmlSchemaValidationException上激发ValidationEventHandler时数据库回滚

.net 在XmlSchemaValidationException上激发ValidationEventHandler时数据库回滚,.net,exception-handling,event-handling,using,.net,Exception Handling,Event Handling,Using,我有一个.xml文档,我正在解析它并将其插入事务中的数据库中。如果发现验证错误,我想回滚任何更改。因为文档可能很大,所以我使用了XmlReaderSettings,以及ValidationEventHandler settings.ValidationEventHandler += new System.Xml.Schema.ValidationEventHandler(ValidationEventHandler); private void ValidationEventHandler(

我有一个
.xml
文档,我正在解析它并将其插入事务中的数据库中。如果发现验证错误,我想回滚任何更改。因为文档可能很大,所以我使用了
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();
    }
}
以下是片段。我实例化
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();
    }
}
然后我尝试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都将被正确处理
  • 事务将在任何异常时回滚(如果连接成功打开)

我错了吗?如果我是,如何修复代码?

不知道Oracle是否支持它,但您也应该看看class@SteveB谢谢我不知道那门课。我将研究它是否可用于我的客户机数据库组合。@SteveB不幸的是,它似乎需要“Oracle Services for MTS”,我不能确定它是否存在于目标环境中。