/// <summary>
        /// Instanciates a YoGomeeUser object from the database via the YoGomeeUserID
        /// </summary>
        public YoGomeeUser(int YoGomeeUserID)
        {
            db = DatabaseFactory.CreateDatabase();
            DbCommand dbCommand = db.GetStoredProcCommand("AG_GetYoGomeeUserByYoGomeeUserID");
            db.AddInParameter(dbCommand, "YoGomeeUserID", DbType.Int32, YoGomeeUserID);

            //execute the stored procedure
            using (IDataReader dr = db.ExecuteReader(dbCommand))
            {
                ColumnFieldList list = new ColumnFieldList(dr);

                if (dr.Read())
                {
                    if (list.IsColumnPresent("YoGomeeUserID")) { this._yoGomeeUserID = (int)dr["YoGomeeUserID"]; }
                    if (list.IsColumnPresent("FirstName")) { this._firstName = (string)dr["FirstName"]; }
                    if (list.IsColumnPresent("LastName")) { this._lastName = (string)dr["LastName"]; }
                    if (list.IsColumnPresent("EmailAddress")) { this._emailAddress = (string)dr["EmailAddress"]; }
                    if (list.IsColumnPresent("Password")) { this._password = (string)dr["Password"]; }
                    if (list.IsColumnPresent("PhoneNumber")) { this._phoneNumber = (string)dr["PhoneNumber"]; }
                    if (list.IsColumnPresent("PhoneModel")) { this._phoneModel = (int)dr["PhoneModel"]; }
                    if (list.IsColumnPresent("ISOCountry")) { this._iSOCountry = (string)dr["ISOCountry"]; }
                    if (list.IsColumnPresent("SignupIPAddress")) { this._signupIPAddress = (string)dr["SignupIPAddress"]; }
                    if (list.IsColumnPresent("Created")) { this._created = (DateTime)dr["Created"]; }

                }
                else
                {
                    throw new Exception("There is no YoGomeeUser in the database with the ID " + YoGomeeUserID);
                }

                dr.Close();
            }
        }
        /// <summary>
        /// Takes an prepopulated IDataReader and creates an array of TimeZones
        /// </summary>
        public static List<TimeZone> PopulateObjectWithJoin(IDataReader dr)
        {
            ColumnFieldList list = new ColumnFieldList(dr);

            List<TimeZone> arr = new List<TimeZone>();

            TimeZone obj;

            while (dr.Read())
            {
                obj = new TimeZone();
                if (list.IsColumnPresent("TimeZoneID")) { obj._timeZoneID = (int)dr["TimeZoneID"]; }
                if (list.IsColumnPresent("TimeZoneCD")) { obj._timeZoneCD = (string)dr["TimeZoneCD"]; }
                if (list.IsColumnPresent("GMTOffSet")) { obj._gMTOffSet = (decimal)dr["GMTOffSet"]; }
                if (list.IsColumnPresent("DSTOffSet")) { obj._dSTOffSet = (decimal)dr["DSTOffSet"]; }

                arr.Add(obj);
            }

            dr.Close();

            return arr;
        }
        /// <summary>
        /// Instanciates a Country object from the database via the CountryID
        /// </summary>
        public Country(int CountryID)
        {
            db = DatabaseFactory.CreateDatabase();
            DbCommand dbCommand = db.GetStoredProcCommand("AG_GetCountryByCountryID");
            db.AddInParameter(dbCommand, "CountryID", DbType.Int32, CountryID);

            //execute the stored procedure
            using (IDataReader dr = db.ExecuteReader(dbCommand))
            {
                ColumnFieldList list = new ColumnFieldList(dr);

                if (dr.Read())
                {
                    if (list.IsColumnPresent("CountryID")) { this._countryID = (int)dr["CountryID"]; }
                    if (list.IsColumnPresent("CountryCode")) { this._countryCode = (string)dr["CountryCode"]; }
                    if (list.IsColumnPresent("Name")) { this._name = (string)dr["Name"]; }

                }
                else
                {
                    throw new Exception("There is no Country in the database with the ID " + CountryID);
                }

                dr.Close();
            }
        }
        /// <summary>
        /// Takes an prepopulated IDataReader and creates an array of Metadatas
        /// </summary>
        public static List<Metadata> PopulateObjectWithJoin(IDataReader dr)
        {
            ColumnFieldList list = new ColumnFieldList(dr);

            List<Metadata> arr = new List<Metadata>();

            Metadata obj;

            while (dr.Read())
            {
                obj = new Metadata();
                if (list.IsColumnPresent("MetaDataID")) { obj._metaDataID = (int)dr["MetaDataID"]; }
                if (list.IsColumnPresent("GeoNamesModDate")) { obj._geoNamesModDate = (DateTime)dr["GeoNamesModDate"]; }

                arr.Add(obj);
            }

            dr.Close();

            return arr;
        }
        /// <summary>
        /// Instanciates a TimeZone object from the database via the TimeZoneID
        /// </summary>
        public TimeZone(int TimeZoneID)
        {
            db = DatabaseFactory.CreateDatabase();
            DbCommand dbCommand = db.GetStoredProcCommand("AG_GetTimeZoneByTimeZoneID");
            db.AddInParameter(dbCommand, "TimeZoneID", DbType.Int32, TimeZoneID);

            //execute the stored procedure
            using (IDataReader dr = db.ExecuteReader(dbCommand))
            {
                ColumnFieldList list = new ColumnFieldList(dr);

                if (dr.Read())
                {
                    if (list.IsColumnPresent("TimeZoneID")) { this._timeZoneID = (int)dr["TimeZoneID"]; }
                    if (list.IsColumnPresent("TimeZoneCD")) { this._timeZoneCD = (string)dr["TimeZoneCD"]; }
                    if (list.IsColumnPresent("GMTOffSet")) { this._gMTOffSet = (decimal)dr["GMTOffSet"]; }
                    if (list.IsColumnPresent("DSTOffSet")) { this._dSTOffSet = (decimal)dr["DSTOffSet"]; }

                }
                else
                {
                    throw new Exception("There is no TimeZone in the database with the ID " + TimeZoneID);
                }

                dr.Close();
            }
        }
        /// <summary>
        /// Instanciates a FeatureCode object from the database via the FeatureCodeID
        /// </summary>
        public FeatureCode(int FeatureCodeID)
        {
            db = DatabaseFactory.CreateDatabase();
            DbCommand dbCommand = db.GetStoredProcCommand("AG_GetFeatureCodeByFeatureCodeID");
            db.AddInParameter(dbCommand, "FeatureCodeID", DbType.Int32, FeatureCodeID);

            //execute the stored procedure
            using (IDataReader dr = db.ExecuteReader(dbCommand))
            {
                ColumnFieldList list = new ColumnFieldList(dr);

                if (dr.Read())
                {
                    if (list.IsColumnPresent("FeatureCodeID")) { this._featureCodeID = (int)dr["FeatureCodeID"]; }
                    if (list.IsColumnPresent("FeatureCodeCD")) { this._featureCodeCD = (string)dr["FeatureCodeCD"]; }
                    if (list.IsColumnPresent("FeatureClassID")) { this._featureClassID = (int)dr["FeatureClassID"]; }
                    if (list.IsColumnPresent("Name")) { this._name = (string)dr["Name"]; }
                    if (list.IsColumnPresent("Description")) { this._description = (string)dr["Description"]; }

                }
                else
                {
                    throw new Exception("There is no FeatureCode in the database with the ID " + FeatureCodeID);
                }

                dr.Close();
            }
        }
        /// <summary>
        /// Takes an prepopulated IDataReader and creates an array of Friends
        /// </summary>
        public static List<Friend> PopulateObjectWithJoin(IDataReader dr)
        {
            ColumnFieldList list = new ColumnFieldList(dr);

            List<Friend> arr = new List<Friend>();

            Friend obj;

            while (dr.Read())
            {
                obj = new Friend();
                if (list.IsColumnPresent("FriendID")) { obj._friendID = (int)dr["FriendID"]; }
                if (list.IsColumnPresent("YoGomeeUserID1")) { obj._yoGomeeUserID1 = (int)dr["YoGomeeUserID1"]; }
                if (list.IsColumnPresent("YoGomeeUserID2")) { obj._yoGomeeUserID2 = (int)dr["YoGomeeUserID2"]; }
                if (list.IsColumnPresent("User1Accepted")) { obj._user1Accepted = (bool)dr["User1Accepted"]; }
                if (list.IsColumnPresent("User2Accepted")) { obj._user2Accepted = (bool)dr["User2Accepted"]; }
                if (list.IsColumnPresent("UnfriendedUserID")) { obj._unfriendedUserID = (int)dr["UnfriendedUserID"]; }

                arr.Add(obj);
            }

            dr.Close();

            return arr;
        }
        /// <summary>
        /// Takes an prepopulated IDataReader and creates an array of GomeeMaps
        /// </summary>
        public static List<GomeeMap> PopulateObjectWithJoin(IDataReader dr)
        {
            ColumnFieldList list = new ColumnFieldList(dr);

            List<GomeeMap> arr = new List<GomeeMap>();

            GomeeMap obj;

            while (dr.Read())
            {
                obj = new GomeeMap();
                if (list.IsColumnPresent("GomeeMapID")) { obj._gomeeMapID = (int)dr["GomeeMapID"]; }
                if (list.IsColumnPresent("YoGomeeUserID")) { obj._yoGomeeUserID = (int)dr["YoGomeeUserID"]; }
                if (list.IsColumnPresent("GomeeID")) { obj._gomeeID = (int)dr["GomeeID"]; }
                if (list.IsColumnPresent("ProximityHit")) { obj._proximityHit = (bool)dr["ProximityHit"]; }
                if (list.IsColumnPresent("ProximityDateTime")) { obj._proximityDateTime = (DateTime)dr["ProximityDateTime"]; }
                if (list.IsColumnPresent("ReceivedGomee")) { obj._receivedGomee = (bool)dr["ReceivedGomee"]; }
                if (list.IsColumnPresent("ReceivedGomeeDateTime")) { obj._receivedGomeeDateTime = (DateTime)dr["ReceivedGomeeDateTime"]; }

                arr.Add(obj);
            }

            dr.Close();

            return arr;
        }
        /// <summary>
        /// Instanciates a ISOLanguage object from the database via the ISOLanguageID
        /// </summary>
        public ISOLanguage(int ISOLanguageID)
        {
            db = DatabaseFactory.CreateDatabase();
            DbCommand dbCommand = db.GetStoredProcCommand("AG_GetISOLanguageByISOLanguageID");
            db.AddInParameter(dbCommand, "ISOLanguageID", DbType.Int32, ISOLanguageID);

            //execute the stored procedure
            using (IDataReader dr = db.ExecuteReader(dbCommand))
            {
                ColumnFieldList list = new ColumnFieldList(dr);

                if (dr.Read())
                {
                    if (list.IsColumnPresent("ISOLanguageID")) { this._iSOLanguageID = (int)dr["ISOLanguageID"]; }
                    if (list.IsColumnPresent("ISO639_1")) { this._iSO639_1 = (string)dr["ISO639_1"]; }
                    if (list.IsColumnPresent("ISO639_2")) { this._iSO639_2 = (string)dr["ISO639_2"]; }
                    if (list.IsColumnPresent("ISO639_3")) { this._iSO639_3 = (string)dr["ISO639_3"]; }
                    if (list.IsColumnPresent("Name")) { this._name = (string)dr["Name"]; }

                }
                else
                {
                    throw new Exception("There is no ISOLanguage in the database with the ID " + ISOLanguageID);
                }

                dr.Close();
            }
        }
        /// <summary>
        /// Takes an prepopulated IDataReader and creates an array of Gomees
        /// </summary>
        public static List<Gomee> PopulateObjectWithJoin(IDataReader dr)
        {
            ColumnFieldList list = new ColumnFieldList(dr);

            List<Gomee> arr = new List<Gomee>();

            Gomee obj;

            while (dr.Read())
            {
                obj = new Gomee();
                if (list.IsColumnPresent("GomeeID")) { obj._gomeeID = (int)dr["GomeeID"]; }
                if (list.IsColumnPresent("YoGomeeUserID")) { obj._yoGomeeUserID = (int)dr["YoGomeeUserID"]; }
                if (list.IsColumnPresent("Active")) { obj._active = (bool)dr["Active"]; }
                if (list.IsColumnPresent("Latitude")) { obj._latitude = (decimal)dr["Latitude"]; }
                if (list.IsColumnPresent("Longitude")) { obj._longitude = (decimal)dr["Longitude"]; }
                if (list.IsColumnPresent("Expiration")) { obj._expiration = (DateTime)dr["Expiration"]; }
                if (list.IsColumnPresent("DoesExpire")) { obj._doesExpire = (bool)dr["DoesExpire"]; }
                if (list.IsColumnPresent("GomeeType")) { obj._gomeeType = (int)dr["GomeeType"]; }
                if (list.IsColumnPresent("RawValue1")) { obj._rawValue1 = (string)dr["RawValue1"]; }
                if (list.IsColumnPresent("RawValue2")) { obj._rawValue2 = (string)dr["RawValue2"]; }
                if (list.IsColumnPresent("Created")) { obj._created = (DateTime)dr["Created"]; }

                arr.Add(obj);
            }

            dr.Close();

            return arr;
        }
        /// <summary>
        /// Instanciates a GomeeMap object from the database via the GomeeMapID
        /// </summary>
        public GomeeMap(int GomeeMapID)
        {
            db = DatabaseFactory.CreateDatabase();
            DbCommand dbCommand = db.GetStoredProcCommand("AG_GetGomeeMapByGomeeMapID");
            db.AddInParameter(dbCommand, "GomeeMapID", DbType.Int32, GomeeMapID);

            //execute the stored procedure
            using (IDataReader dr = db.ExecuteReader(dbCommand))
            {
                ColumnFieldList list = new ColumnFieldList(dr);

                if (dr.Read())
                {
                    if (list.IsColumnPresent("GomeeMapID")) { this._gomeeMapID = (int)dr["GomeeMapID"]; }
                    if (list.IsColumnPresent("YoGomeeUserID")) { this._yoGomeeUserID = (int)dr["YoGomeeUserID"]; }
                    if (list.IsColumnPresent("GomeeID")) { this._gomeeID = (int)dr["GomeeID"]; }
                    if (list.IsColumnPresent("ProximityHit")) { this._proximityHit = (bool)dr["ProximityHit"]; }
                    if (list.IsColumnPresent("ProximityDateTime")) { this._proximityDateTime = (DateTime)dr["ProximityDateTime"]; }
                    if (list.IsColumnPresent("ReceivedGomee")) { this._receivedGomee = (bool)dr["ReceivedGomee"]; }
                    if (list.IsColumnPresent("ReceivedGomeeDateTime")) { this._receivedGomeeDateTime = (DateTime)dr["ReceivedGomeeDateTime"]; }

                }
                else
                {
                    throw new Exception("There is no GomeeMap in the database with the ID " + GomeeMapID);
                }

                dr.Close();
            }
        }
        /// <summary>
        /// Instanciates a Gomee object from the database via the GomeeID
        /// </summary>
        public Gomee(int GomeeID)
        {
            db = DatabaseFactory.CreateDatabase();
            DbCommand dbCommand = db.GetStoredProcCommand("AG_GetGomeeByGomeeID");
            db.AddInParameter(dbCommand, "GomeeID", DbType.Int32, GomeeID);

            //execute the stored procedure
            using (IDataReader dr = db.ExecuteReader(dbCommand))
            {
                ColumnFieldList list = new ColumnFieldList(dr);

                if (dr.Read())
                {
                    if (list.IsColumnPresent("GomeeID")) { this._gomeeID = (int)dr["GomeeID"]; }
                    if (list.IsColumnPresent("YoGomeeUserID")) { this._yoGomeeUserID = (int)dr["YoGomeeUserID"]; }
                    if (list.IsColumnPresent("Active")) { this._active = (bool)dr["Active"]; }
                    if (list.IsColumnPresent("Latitude")) { this._latitude = (decimal)dr["Latitude"]; }
                    if (list.IsColumnPresent("Longitude")) { this._longitude = (decimal)dr["Longitude"]; }
                    if (list.IsColumnPresent("Expiration")) { this._expiration = (DateTime)dr["Expiration"]; }
                    if (list.IsColumnPresent("DoesExpire")) { this._doesExpire = (bool)dr["DoesExpire"]; }
                    if (list.IsColumnPresent("GomeeType")) { this._gomeeType = (int)dr["GomeeType"]; }
                    if (list.IsColumnPresent("RawValue1")) { this._rawValue1 = (string)dr["RawValue1"]; }
                    if (list.IsColumnPresent("RawValue2")) { this._rawValue2 = (string)dr["RawValue2"]; }
                    if (list.IsColumnPresent("Created")) { this._created = (DateTime)dr["Created"]; }

                }
                else
                {
                    throw new Exception("There is no Gomee in the database with the ID " + GomeeID);
                }

                dr.Close();
            }
        }
        /// <summary>
        /// Takes an prepopulated IDataReader and creates an array of GeoNames
        /// </summary>
        public static List<GeoName> PopulateObjectWithJoin(IDataReader dr)
        {
            ColumnFieldList list = new ColumnFieldList(dr);

            List<GeoName> arr = new List<GeoName>();

            GeoName obj;

            while (dr.Read())
            {
                obj = new GeoName();
                if (list.IsColumnPresent("GeoNameID")) { obj._geoNameID = (int)dr["GeoNameID"]; }
                if (list.IsColumnPresent("Name")) { obj._name = (string)dr["Name"]; }
                if (list.IsColumnPresent("Latitude")) { obj._latitude = (decimal)dr["Latitude"]; }
                if (list.IsColumnPresent("Longitude")) { obj._longitude = (decimal)dr["Longitude"]; }
                if (list.IsColumnPresent("FeatureClassID")) { obj._featureClassID = (int)dr["FeatureClassID"]; }
                if (list.IsColumnPresent("FeatureCodeID")) { obj._featureCodeID = (int)dr["FeatureCodeID"]; }
                if (list.IsColumnPresent("CountryID")) { obj._countryID = (int)dr["CountryID"]; }
                if (list.IsColumnPresent("Admin1ID")) { obj._admin1ID = (int)dr["Admin1ID"]; }
                if (list.IsColumnPresent("Population")) { obj._population = (int)dr["Population"]; }
                if (list.IsColumnPresent("Elevation")) { obj._elevation = (int)dr["Elevation"]; }
                if (list.IsColumnPresent("gtopo3")) { obj._gtopo3 = (int)dr["gtopo3"]; }
                if (list.IsColumnPresent("TimeZoneID")) { obj._timeZoneID = (int)dr["TimeZoneID"]; }
                if (list.IsColumnPresent("ModDate")) { obj._modDate = (DateTime)dr["ModDate"]; }

                arr.Add(obj);
            }

            dr.Close();

            return arr;
        }
        /// <summary>
        /// Instanciates a GeoName object from the database via the GeoNameID
        /// </summary>
        public GeoName(int GeoNameID)
        {
            db = DatabaseFactory.CreateDatabase();
            DbCommand dbCommand = db.GetStoredProcCommand("AG_GetGeoNameByGeoNameID");
            db.AddInParameter(dbCommand, "GeoNameID", DbType.Int32, GeoNameID);

            //execute the stored procedure
            using (IDataReader dr = db.ExecuteReader(dbCommand))
            {
                ColumnFieldList list = new ColumnFieldList(dr);

                if (dr.Read())
                {
                    if (list.IsColumnPresent("GeoNameID")) { this._geoNameID = (int)dr["GeoNameID"]; }
                    if (list.IsColumnPresent("Name")) { this._name = (string)dr["Name"]; }
                    if (list.IsColumnPresent("Latitude")) { this._latitude = (decimal)dr["Latitude"]; }
                    if (list.IsColumnPresent("Longitude")) { this._longitude = (decimal)dr["Longitude"]; }
                    if (list.IsColumnPresent("FeatureClassID")) { this._featureClassID = (int)dr["FeatureClassID"]; }
                    if (list.IsColumnPresent("FeatureCodeID")) { this._featureCodeID = (int)dr["FeatureCodeID"]; }
                    if (list.IsColumnPresent("CountryID")) { this._countryID = (int)dr["CountryID"]; }
                    if (list.IsColumnPresent("Admin1ID")) { this._admin1ID = (int)dr["Admin1ID"]; }
                    if (list.IsColumnPresent("Population")) { this._population = (int)dr["Population"]; }
                    if (list.IsColumnPresent("Elevation")) { this._elevation = (int)dr["Elevation"]; }
                    if (list.IsColumnPresent("gtopo3")) { this._gtopo3 = (int)dr["gtopo3"]; }
                    if (list.IsColumnPresent("TimeZoneID")) { this._timeZoneID = (int)dr["TimeZoneID"]; }
                    if (list.IsColumnPresent("ModDate")) { this._modDate = (DateTime)dr["ModDate"]; }

                }
                else
                {
                    throw new Exception("There is no GeoName in the database with the ID " + GeoNameID);
                }

                dr.Close();
            }
        }
        /// <summary>
        /// Takes an prepopulated IDataReader and creates an array of YoGomeeUsers
        /// </summary>
        public static List<YoGomeeUser> PopulateObjectWithJoin(IDataReader dr)
        {
            ColumnFieldList list = new ColumnFieldList(dr);

            List<YoGomeeUser> arr = new List<YoGomeeUser>();

            YoGomeeUser obj;

            while (dr.Read())
            {
                obj = new YoGomeeUser();
                if (list.IsColumnPresent("YoGomeeUserID")) { obj._yoGomeeUserID = (int)dr["YoGomeeUserID"]; }
                if (list.IsColumnPresent("FirstName")) { obj._firstName = (string)dr["FirstName"]; }
                if (list.IsColumnPresent("LastName")) { obj._lastName = (string)dr["LastName"]; }
                if (list.IsColumnPresent("EmailAddress")) { obj._emailAddress = (string)dr["EmailAddress"]; }
                if (list.IsColumnPresent("Password")) { obj._password = (string)dr["Password"]; }
                if (list.IsColumnPresent("PhoneNumber")) { obj._phoneNumber = (string)dr["PhoneNumber"]; }
                if (list.IsColumnPresent("PhoneModel")) { obj._phoneModel = (int)dr["PhoneModel"]; }
                if (list.IsColumnPresent("ISOCountry")) { obj._iSOCountry = (string)dr["ISOCountry"]; }
                if (list.IsColumnPresent("SignupIPAddress")) { obj._signupIPAddress = (string)dr["SignupIPAddress"]; }
                if (list.IsColumnPresent("Created")) { obj._created = (DateTime)dr["Created"]; }

                arr.Add(obj);
            }

            dr.Close();

            return arr;
        }
        /// <summary>
        /// Takes an prepopulated IDataReader and creates an array of ISOLanguages
        /// </summary>
        public static List<ISOLanguage> PopulateObjectWithJoin(IDataReader dr)
        {
            ColumnFieldList list = new ColumnFieldList(dr);

            List<ISOLanguage> arr = new List<ISOLanguage>();

            ISOLanguage obj;

            while (dr.Read())
            {
                obj = new ISOLanguage();
                if (list.IsColumnPresent("ISOLanguageID")) { obj._iSOLanguageID = (int)dr["ISOLanguageID"]; }
                if (list.IsColumnPresent("ISO639_1")) { obj._iSO639_1 = (string)dr["ISO639_1"]; }
                if (list.IsColumnPresent("ISO639_2")) { obj._iSO639_2 = (string)dr["ISO639_2"]; }
                if (list.IsColumnPresent("ISO639_3")) { obj._iSO639_3 = (string)dr["ISO639_3"]; }
                if (list.IsColumnPresent("Name")) { obj._name = (string)dr["Name"]; }

                arr.Add(obj);
            }

            dr.Close();

            return arr;
        }
        /// <summary>
        /// Takes an prepopulated IDataReader and creates an array of Countrys
        /// </summary>
        public static List<Country> PopulateObjectWithJoin(IDataReader dr)
        {
            ColumnFieldList list = new ColumnFieldList(dr);

            List<Country> arr = new List<Country>();

            Country obj;

            while (dr.Read())
            {
                obj = new Country();
                if (list.IsColumnPresent("CountryID")) { obj._countryID = (int)dr["CountryID"]; }
                if (list.IsColumnPresent("CountryCode")) { obj._countryCode = (string)dr["CountryCode"]; }
                if (list.IsColumnPresent("Name")) { obj._name = (string)dr["Name"]; }

                arr.Add(obj);
            }

            dr.Close();

            return arr;
        }
        /// <summary>
        /// Instanciates a Metadata object from the database via the MetaDataID
        /// </summary>
        public Metadata(int MetaDataID)
        {
            db = DatabaseFactory.CreateDatabase();
            DbCommand dbCommand = db.GetStoredProcCommand("AG_GetMetadataByMetaDataID");
            db.AddInParameter(dbCommand, "MetaDataID", DbType.Int32, MetaDataID);

            //execute the stored procedure
            using (IDataReader dr = db.ExecuteReader(dbCommand))
            {
                ColumnFieldList list = new ColumnFieldList(dr);

                if (dr.Read())
                {
                    if (list.IsColumnPresent("MetaDataID")) { this._metaDataID = (int)dr["MetaDataID"]; }
                    if (list.IsColumnPresent("GeoNamesModDate")) { this._geoNamesModDate = (DateTime)dr["GeoNamesModDate"]; }

                }
                else
                {
                    throw new Exception("There is no Metadata in the database with the ID " + MetaDataID);
                }

                dr.Close();
            }
        }
        /// <summary>
        /// Takes an prepopulated IDataReader and creates an array of FeatureCodes
        /// </summary>
        public static List<FeatureCode> PopulateObject(IDataReader dr)
        {
            ColumnFieldList list = new ColumnFieldList(dr);

            List<FeatureCode> arr = new List<FeatureCode>();

            FeatureCode obj;

            while (dr.Read())
            {
                obj = new FeatureCode();
                if (list.IsColumnPresent("FeatureCodeID")) { obj._featureCodeID = (int)dr["FeatureCodeID"]; }
                if (list.IsColumnPresent("FeatureCodeCD")) { obj._featureCodeCD = (string)dr["FeatureCodeCD"]; }
                if (list.IsColumnPresent("FeatureClassID")) { obj._featureClassID = (int)dr["FeatureClassID"]; }
                if (list.IsColumnPresent("Name")) { obj._name = (string)dr["Name"]; }
                if (list.IsColumnPresent("Description")) { obj._description = (string)dr["Description"]; }

                arr.Add(obj);
            }

            dr.Close();

            return arr;
        }
        /// <summary>
        /// Instanciates a Friend object from the database via the FriendID
        /// </summary>
        public Friend(int FriendID)
        {
            db = DatabaseFactory.CreateDatabase();
            DbCommand dbCommand = db.GetStoredProcCommand("AG_GetFriendByFriendID");
            db.AddInParameter(dbCommand, "FriendID", DbType.Int32, FriendID);

            //execute the stored procedure
            using (IDataReader dr = db.ExecuteReader(dbCommand))
            {
                ColumnFieldList list = new ColumnFieldList(dr);

                if (dr.Read())
                {
                    if (list.IsColumnPresent("FriendID")) { this._friendID = (int)dr["FriendID"]; }
                    if (list.IsColumnPresent("YoGomeeUserID1")) { this._yoGomeeUserID1 = (int)dr["YoGomeeUserID1"]; }
                    if (list.IsColumnPresent("YoGomeeUserID2")) { this._yoGomeeUserID2 = (int)dr["YoGomeeUserID2"]; }
                    if (list.IsColumnPresent("User1Accepted")) { this._user1Accepted = (bool)dr["User1Accepted"]; }
                    if (list.IsColumnPresent("User2Accepted")) { this._user2Accepted = (bool)dr["User2Accepted"]; }
                    if (list.IsColumnPresent("UnfriendedUserID")) { this._unfriendedUserID = (int)dr["UnfriendedUserID"]; }

                }
                else
                {
                    throw new Exception("There is no Friend in the database with the ID " + FriendID);
                }

                dr.Close();
            }
        }