我有一个.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 都会被正确处理
- 事务将在任何异常时回滚(如果连接设法打开)
我错了吗?如果我是,我该如何修复代码?