トランザクションをサポートしていない、またはネストされたトランザクションをサポートしていないプロバイダーを使用して実行できるコードがあります。
そのようなサポートをプログラムでどのように決定しますか?
たとえば、以下のコードは、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();
}