public static void AddRowUpdatedHandler(this DbDataAdapter adapter, RowUpdatedEventHandler handler)
        {
            EventInfo updEvent = adapter.GetType().GetEvent("RowUpdated", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly);

            if (updEvent != null)
            {
                updEvent.AddEventHandler(adapter, Delegate.CreateDelegate(updEvent.EventHandlerType, handler.Method));
            }
        }
        protected void UninstallRowUpdatedHandler(DbDataAdapter da, RowUpdatedEventHandler rowUpdatedHandler)
        {
            switch (DBEngine)
            {
            case DBEngines.MSSqlServer:
                (da as SqlDataAdapter).RowUpdated -= new SqlRowUpdatedEventHandler(rowUpdatedHandler);
                break;

            case DBEngines.Oracle:
                (da as OracleDataAdapter).RowUpdated -= new OracleRowUpdatedEventHandler(rowUpdatedHandler);
                break;
            }
        }
        /// <summary>
        /// Registers a <c>RowUpdatedEventHandler</c> with this instance's <c>RowUpdated</c> event.
        /// </summary>
        /// <param name="handler">The event handler to register for the event.</param>
        /// <returns><c>true</c> if the event handler was successfully registered, otherwise <c>false</c>.</returns>
        public static bool AddRowUpdatedHandler(this DbDataAdapter adapter, RowUpdatedEventHandler handler)
        {
            EventInfo updEvent = GetEvent("RowUpdated", adapter.GetType());

            if (updEvent != null)
            {
                try
                {
                    if (handler.Method.IsStatic)
                    {
                        updEvent.AddEventHandler(adapter, Delegate.CreateDelegate(updEvent.EventHandlerType, handler.Method));
                    }
                    else
                    {
                        updEvent.AddEventHandler(adapter, Delegate.CreateDelegate(updEvent.EventHandlerType, handler.Target, handler.Method));
                    }
                    return(true);
                }
                catch { }
            }
            return(false);
        }