/// <summary>
        /// 
        /// </summary>
        /// <param name="database"></param>
        /// <returns></returns>
        public IEnumerable<StoredProcedureResultSet> EnumerateResultSets(Database database)
        {
            if (database == null) throw new ArgumentNullException("database");
            DbDataReader dr = null;
            var previousState = database.ConnectionState;

            try
            {
                var resultsets = new List<StoredProcedureResultSet>();
                var cm = CreateCommand();
                dr = database.ExecuteReader(cm);
                while (dr.Read())
                {
                    var rs = CreateResultSets(dr);
                    resultsets.Add(rs);
                    yield return rs;
                }
                dr.Close();
                this.SetOutputParameterValue(cm);
            }
            finally
            {
                if (dr != null) { dr.Dispose(); }
                if (previousState == ConnectionState.Closed && database.ConnectionState == ConnectionState.Open) { database.Close(); }
                if (previousState == ConnectionState.Closed && database.OnTransaction == false) { database.Dispose(); }
            }
        }
 /// <summary>
 /// 
 /// </summary>
 /// <param name="database"></param>
 /// <returns></returns>
 public DataTable GetDataTable(Database database)
 {
     if (database == null) throw new ArgumentNullException("database");
     var previousState = database.ConnectionState;
     try
     {
         var cm = CreateCommand();
         var dt = database.GetDataTable(cm);
         return dt;
     }
     finally
     {
         if (previousState == ConnectionState.Closed && database.OnTransaction == false) { database.Dispose(); }
     }
 }