ASP.net 操作ログ採取 TableAdapter拡張 改良版

○TableAdapterの基底クラスを作成

using System.ComponentModel;
using System.Data.SqlClient;
using System.Reflection;
using System.Web;
using System;

namespace Logic.dataset
{
    public class TableAdapterBase : Component
    {
        public SqlDataAdapter InnerAdapter
        {
            get
            {
                return (SqlDataAdapter)GetType().GetProperty("Adapter",
                  BindingFlags.NonPublic | BindingFlags.Instance).GetValue(this, null);
            }
        }

        static public event SqlRowUpdatedEventHandler sqlRowUpdatedEvent = delegate { };
        static public event SqlRowUpdatingEventHandler sqlRowUpdatingEvent = delegate { };

        public TableAdapterBase() : base()
        {
            InnerAdapter.RowUpdated += rowUpdatedEventHandler;
            InnerAdapter.RowUpdating += rowUpdatingEventHandler;
        }

        private void rowUpdatedEventHandler(object sender, SqlRowUpdatedEventArgs e)
        {
            sqlRowUpdatedEvent(sender, e);
        }

        private void rowUpdatingEventHandler(object sender, SqlRowUpdatingEventArgs e)
        {
            sqlRowUpdatingEvent(sender, e);
        }    
    }
}

○TableAdapterの基底クラスを変更

○イベントを設定

・Page_Load部
  Logic.dataset.TableAdapterBase.sqlRowUpdatedEvent += putLogSqlRowUpdatedHandler;

・Page_Unload部
  Logic.dataset.TableAdapterBase.sqlRowUpdatedEvent -= putLogSqlRowUpdatedHandler;


        private static void putLogSqlRowUpdatedHandler(object sender, System.Data.SqlClient.SqlRowUpdatedEventArgs e)
        {
            putLog(e.Row);
        }

        private static void putLogSqlRowUpdatingHandler(object sender, System.Data.SqlClient.SqlRowUpdatingEventArgs e)
        {
            //putLog(e.Row);
        }

※dt.Update()系は拾えるが、dt.Delete()系はダメ。Update()でDeleteしていたら拾える?
 SqlDataAdapterはsealedの為、拡張できない。。。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です