我有可以使用不支持事务或不支持嵌套事务的提供程序执行的代码。
我将如何以编程方式确定这种支持?
例如,下面的代码在使用 MySQL .NET 连接器时在最终提交时抛出 System.InvalidOperationException,但对于 MSSQL 工作正常。
我希望能够更改代码以适应各种提供者,而不必根据提供者的类型对测试进行硬编码(例如,我不想这样做if(typeof(connection) == "some provider name")
)
using (IDbConnection connection = Use.Connection(ConnectionStringName))
using (IDbTransaction transaction = connection.BeginTransaction())
{
using (currentCommand = connection.CreateCommand())
{
using (IDbCommand cmd = connection.CreateCommand())
{
currentCommand = cmd;
currentCommand.Transaction = transaction;
currentCommand.ExecuteNonQuery();
}
if (PipelineExecuter.HasErrors)
{
transaction.Rollback();
}
else
{
transaction.Commit();
}
}
transaction.Commit();
}