private Contact SQLGetContact(string query) { using (SqlConnection connection = new SqlConnection(config.connectionString)) { Contact contact = new Contact(); SqlCommand command = new SqlCommand(query, connection); connection.Open(); SqlDataReader reader = command.ExecuteReader(); try { if (reader.Read()) { // Loop through a list of contact fields that are configured and add them to the return object foreach (string field in config.contactConfig.fields) { try { contact.GetType().GetProperty(field).SetValue(contact, reader[field].ToString(), null); } catch (Exception ex) { throw new WebFaultException<string>(String.Format("Column <{0}> not found in query results: {1}", field, ex.Message), HttpStatusCode.InternalServerError); } } // Get all the phone numbers contact.PhoneNumbers = getPhoneNumbers(reader, config.contactConfig.phoneCount, config.contactConfig.phoneMappings); // Get all the email addresses contact.EmailAddresses = getEmails(reader, config.contactConfig.emailCount, config.contactConfig.emailMappings); if (config.contactConfig.getAddress) { // Get the address contact.Address = getAddress(reader, config.contactConfig.addressFields); } } else { throw new WebFaultException<string>("No results found", HttpStatusCode.NoContent); } } catch (Exception ex) { throw ex; } finally { reader.Close(); } return contact; } }