I’m using C# to write a simple program to read Active Directory and display the value held in a AD field on a Windows form program.
If a property doesn’t exist then the program crashes, below is my code, how can I catch this and move on to the next field without doing a try/catch for each and every attribute?
DirectoryEntry usr = new DirectoryEntry("LDAP://" + domain, username, password);
DirectorySearcher searcher = new DirectorySearcher(usr);
searcher.Filter = "(sAMAccountName=" + GlobalClass.strUserName + ")";
searcher.CacheResults = false;
searcher.SearchScope = SearchScope.Subtree;
searcher.PropertiesToLoad.Add("givenName");
searcher.PropertiesToLoad.Add("telephoneNumber");
//program crashes here if telephoneNumber attribute doesn't exist.
textBoxFirstName.Text = usr.Properties["telephoneNumber"].Value.ToString();
Just checking
usr.Properties["telephoneNumber"]will not work. You must check the actual value. The reason the error is occuring is because you’re callingToString()onValuewhich is null.user.Propertieswill always return aPropertyValueCollection, regardless of the property name entered into the collections indexer.I.e.
You need to check the value itself, the best way through the null coalescing operator: