分散トランスエラーを追跡するにはどうすればよいですか? すべての接続がまだ開いていることを確認する方法はありますか? 適切にクローズされなかったトランザクションを見つける必要がありますか?
アダプターからテーブルに入力すると、次のコードで時折分散トランザクション エラーが発生します。エラーはこのコードにはない可能性があると思われますが、これはエラーが発生する傾向がある場所であり、2 回目の試行でのみ、最初の試行は常に正常に機能します。
using (OracleConnection oraConnection = new OracleConnection(connectionString)){
using (OracleCommand oraCommand = new OracleCommand( "DB_SCHEMA." + rmd.storedprocName, oraConnection )){
oraCommand.CommandType = CommandType.StoredProcedure;
if ( rmd.parameters != null ){
for ( int i = 0; i <= rmd.parameters.GetUpperBound( 0 ); i++ )
{
OracleParameter oraParameter = new OracleParameter();
oraParameter.ParameterName = rmd.parameterNames[ i ];
oraParameter.OracleDbType = rmd.parameterTypes[ i ];
oraParameter.Size = 15;
string dataType = oraParameter.OracleDbType.ToString().ToUpper();
switch ( dataType )
{
case "VARCHAR2":
oraParameter.Value = rmd.parameters[ i ].ToString();
break;
case "CHAR":
oraParameter.Value = rmd.parameters[ i ].ToString();
break;
case "NUMBER":
oraParameter.Value = Convert.ToDouble( rmd.parameters[ i ] );
break;
case "DATE":
oraParameter.Value = Convert.ToDateTime( rmd.parameters[ i ] );
break;
default:
oraParameter.Value = rmd.parameters[ i ].ToString();
break;
}
oraCommand.Parameters.Add( oraParameter );
}
}
oraCommand.Parameters.Add( "RS", Oracle.DataAccess.Client.OracleDbType.RefCursor).Direction = ParameterDirection.Output;
OracleDataAdapter oraDataAdapter = new OracleDataAdapter( oraCommand );
oraDataAdapter.Fill( dataTable ); //< -- error is thrown here
}
}