Example #1
0
        /// <summary>
        /// Execute a ADO.NET operation on a command object using a generic interface based callback.
        /// Direct use of this method is not recommended.
        /// </summary>
        /// <typeparam name="T">return type</typeparam>
        /// <param name="action">the action to be executed</param>
        public T Execute <T>(IDataAdapterCallback <T> action)
        {
            IDbDataAdapter dataAdapter = null;

            try
            {
                DbProvider.OpenConnection();
                dataAdapter = DbProvider.CreateDataAddapter();
                dataAdapter.SelectCommand             = DbProvider.CreateCommand();
                dataAdapter.SelectCommand.Connection  = DbProvider.Connection;
                dataAdapter.SelectCommand.Transaction = DbProvider.Transaction;

                T result = default(T);
                result = action.DoInDataAdapter(dataAdapter);
                return(result);
            }
            catch (DataException)
            {
                throw;
            }
            catch (DbException e)
            {
                throw new DataException($"Failed to execute a command cllback: {e.Message}", e);
            }
            catch (Exception)
            {
                throw;
            }
            finally
            {
                ConnectionUtils.DisposeDataAdapterCommands(dataAdapter);
                ConnectionUtils.ClosseConnection(DbProvider);
            }
        }