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();
}
Oracle コマンド オブジェクトが使用しているステートメントをログアウトする方法を探しています。私の現在のアプローチ(質問を参照)は、あまり読みにくいため、まだ満足のいくものではありません。
パラメータ化されたクエリを解析するのに役立つ API (おそらく OracleClient 名前空間にあるもの) があることを願っていました。もっと洗練された文字列置換や正規表現を行うこともできましたが、知識を集めたかったのです。私はすでにそれについていくつかの研究を行ってきましたが、何も見つかりませんでした。