.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 はすべて適切に破棄されます。
- 例外が発生すると、トランザクションはロールバックされます (接続が開かれた場合)。
私が間違っている?私がそうである場合、どうすればコードを修正できますか?