Я использую параметризованные запросы в своем коде C# для взаимодействия с базой данных Oracle. Что я могу сделать, чтобы регистрировать операторы в более читаемом виде?
Предположим, у меня есть параметризованный запрос, например:
INSERT INTO PERSON (ID, NAME, BIRTHDATE) VALUES (:id, :name, :birthdate)
В идеале я хотел бы видеть запись журнала со всеми замененными параметрами, чтобы я мог скопировать и вставить оператор для последующего использования:
INSERT INTO PERSON (ID, NAME, BIRTHDATE) VALUES (23, ‘Mike’, TO_DATE('2003/07/09', 'yyyy/mm/dd')
Мой текущий подход состоит в том, чтобы распечатать строку параметризованного запроса, а затем перебрать все параметры и использовать ToString(). Это немного сложно читать, если есть много параметров. Это даст что-то вроде:
INSERT INTO PERSON (ID, NAME, BIRTHDATE) VALUES (:id, :name, :birthdate) [:id=23, :name=Mike, birthdate=2004/07/09 00:00:00]
Другим подходом, который я планирую, будет использование функции string.Replace() для замены заполнителей параметров. Но, может быть, есть лучший способ сделать это?
Заранее спасибо.
Редактировать 1:
Я подумал, что лучше привести пример кода.
Я использую параметризованные запросы в этой форме (Примечание: я использую 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();
}
Я ищу способ выйти из оператора, который использует объект команды оракула. Мои текущие подходы (см. вопрос) пока не очень удовлетворительны, потому что не очень читабельны.
Я надеялся, что будет какой-то API (может быть, что-то даже в пространстве имен OracleClient), который поможет мне разобрать параметризованный запрос. Я мог бы сделать более сложную замену строк или регулярное выражение, но я хотел собрать некоторые знания. Я уже провел некоторые исследования по этому вопросу, но ничего не нашел.