したがって、私はかなりアマチュアのプログラマーであり、私が取り組んでいるこのアプリケーション用の小さな監査システムを作成するためのいくつかの例に従おうとしています。
C# .NET 4.0 の上で使用しているフレームワーク (StrataFrame) では、監査された値をバイト配列として格納する必要があります。私は彼らのフォーラムの小さな例に従いました。
System.Runtime.Serialization.Formatters.Binary.BinaryFormatter formatter = new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter();
System.IO.MemoryStream outstream = new System.IO.MemoryStream();
foreach (DataColumn dc in jobHeaderBO1.CurrentDataTable.Columns)
{
if (!dr[dc.ColumnName, DataRowVersion.Original].Equals(dr[dc.ColumnName, DataRowVersion.Current]))
{
formatter.Serialize(outstream, dr[dc.ColumnName, DataRowVersion.Current] + " " + dr[dc.ColumnName, DataRowVersion.Original]);
Auditor.ShouldAuditDataChanges(jobHeaderBO1);
Auditor.InsertAuditEvent("JOB HEADER", dc.ColumnName + " changed.", outstream.ToArray());
Auditor.InsertAuditRecords(jobHeaderBO1);
}
}
私が知る限りすべてが機能するように、レコードは適切なテーブルに挿入され、それを見るとゴミの山です。だから今、私はそのゴミをユーザーに提示する必要があります!
次のようなことを行うだけの例をいくつか見つけました。
string oldv = System.Text.Encoding.UTF8.GetString(adf.adf_OldValue);
string newv = System.Text.Encoding.UTF8.GetString(adf.adf_NewValue);
oldv と newv を出力すると、値が正しく表示されません。テキストを格納したフィールドの一部はほとんど正常に表示されますが、日付と数値は表示されません。問題は、それがどのタイプのエンコーディングなのかわからないことであり、どちらも見つけられないことだと思います。助言がありますか?