Consultas parametrizadas (C #, Oracle): Como produzir uma representação mais legível?

Estou usando consultas parametrizadas no meu código C # para interagir com um banco de dados Oracle. O que posso fazer para registrar as instruções de maneira mais legível?

Suponha que eu tenha uma consulta parametrizada como:

INSERT INTO PERSON (ID, NAME, BIRTHDATE) VALUES (:id, :name, :birthdate)

Idealmente, gostaria de ver a entrada do log com todos os parâmetros substituídos para que eu pudesse copiar e colar a instrução para uso posterior:

INSERT INTO PERSON (ID, NAME, BIRTHDATE) VALUES (23, ‘Mike’, TO_DATE('2003/07/09', 'yyyy/mm/dd')

Minha abordagem atual é imprimir a seqüência de caracteres da consulta parametrizada e, em seguida, iterar sobre todos os parâmetros e usar ToString (). Isso é um pouco difícil de ler, se houver muitos parâmetros. Isso renderia algo como:

INSERT INTO PERSON (ID, NAME, BIRTHDATE) VALUES (:id, :name, :birthdate) [:id=23, :name=Mike, birthdate=2004/07/09 00:00:00]

Outra abordagem que estou planejando seria usar a função string.Replace () para substituir os espaços reservados do parâmetro. Mas talvez haja alguma maneira melhor de fazer isso?

Desde já, obrigado.

Editar 1:

Eu achei melhor fornecer um exemplo de código.

Estou usando consultas parametrizadas neste formulário (Nota: estou usando log4net):

        using (OracleConnection connection = new OracleConnection(connectionString))
        using (OracleCommand command = new OracleCommand(statement, connection))
        {
            command.Parameters.AddWithValue(":id", id);
            command.Parameters.AddWithValue(":name", name);
            command.Parameters.AddWithValue(":birthdate", birthdate);
            command.Connection.Open();
            log.DebugFormat("Executing statement: {0}.", command.CommandText);
            // there I would add some more code to iterate over
            // the parameters and print them out
            command.ExecuteNonQuery();
            command.Connection.Close();
        }

Estou procurando uma maneira de fazer logoff da instrução que o objeto de comando oracle está usando. Minhas abordagens atuais (ver pergunta) ainda não são muito satisfatórias, porque não são muito legíveis.

Eu esperava que houvesse alguma API (talvez algo mesmo no namespace OracleClient) que ajudasse a analisar a consulta parametrizada para mim. Eu poderia fazer uma substituição ou regex de string mais sofisticada, mas queria coletar algum conhecimento. Eu já fiz algumas pesquisas, mas não encontrei nada.

questionAnswers(4)

yourAnswerToTheQuestion