/// <summary>
        /// Execute a nonquery stored procedure and get its return value
        /// </summary>
        /// <param name="storedProcedureName">Stored procedure name using dbo.Name sintax</param>
        /// <param name="parameters">Array of DataParameter</param>
        /// <returns>Stored procedure return code</returns>
        protected virtual int ExecuteScalar(string pStoredProcedureName, DataParameter[] pParameters)
        {
            DbCommand command = null;
            try
            {
                IList<DataParameter> outputParameters;
                Database dbAccess;
                command = PrepareCommand(pStoredProcedureName, pParameters, out outputParameters, out dbAccess);

                dbAccess.ExecuteNonQuery(command);
                FillOutputParameters(ref outputParameters, command);

                return (int)outputParameters[RETURN_VALUE_PARAM_INDEX].Value;
            }
            catch(Exception ex)
            {
                LastErrorMessage = ex.Message;
                return NULL_VALUE;
            }
            finally
            {
                if (command != null && command.Connection != null && command.Connection.State == ConnectionState.Open && Transaction.Current == null)
                {
                    command.Connection.Close();
                }
            }
        }
 /// <summary>
 /// Extract one DataSet using all the parameters required
 /// </summary>
 /// <param name="storedProcedureName">Stored procedure name using dbo.Name sintax</param>
 /// <param name="parameters">Array of DataParameter</param>
 /// <returns>Full fill dataset</returns>
 protected DataSet ExecuteDataSet(string pStoredProcedureName, DataParameter[] pParameters)
 {
     int returnValue;
     return ExecuteDataSet(pStoredProcedureName, pParameters, out returnValue);
 }