Sunday, May 27, 2018

How to get a value from Active Directory using C# DirectoryEntry Class

Here is a sample C# program to get email id from active directory by username using DirectorySearcher class.
using System.DirectoryServices;
public string GetEmailIdFromActiveDirectory(string userName)
{

 var emailId = string.Empty;

 string activeDirectory_LDAP = "LDAP://server";

 string activeDirectory_User = "ad_username";

 string activeDirectory_Password = "ad_password";

 var directoryEntry = new DirectoryEntry(activeDirectory_LDAP, activeDirectory_User, activeDirectory_Password) { AuthenticationType = AuthenticationTypes.Secure };

 var directorySearcher = new DirectorySearcher(directoryEntry);

 directorySearcher.Filter = "sAMAccountName=" + userName;

 directorySearcher.SearchScope = SearchScope.Subtree;



 SearchResult searchResult = directorySearcher.FindOne();

 if (searchResult != null)

 {

  emailId = searchResult.GetDirectoryEntry().Properties["email"].Value.ToString();

 }



 return emailId;

}

How to get a value from Active Directory using C# PrincipalSearcher Class

Here is a sample C# program to get email id from active directory by username using PrincipalSearcher class.
using System.DirectoryServices.AccountManagement;
public string GetEmailIdFromActiveDirectory(string userName)
{
var emailId = string.Empty;

string activeDirectory_LDAP = "server";
string activeDirectory_User = "ad_username";
string activeDirectory_Password = "ad_password";

PrincipalContext ctx = new PrincipalContext(ContextType.Domain, activeDirectory_LDAP);

bool isCredentialsValid = ctx.ValidateCredentials(activeDirectory_User, activeDirectory_Password);

if (isCredentialsValid)
{
UserPrincipal userPr = new UserPrincipal(ctx);
userPr.SamAccountName = userName;

PrincipalSearcher srchUser = new PrincipalSearcher(userPr);
UserPrincipal foundUsr = srchUser.FindOne() as UserPrincipal;

if (foundUsr != null)
{
emailId = foundUsr.Email;
}
}

return emailId;
}

Friday, March 30, 2018

Create custom SQL exception with custom message in C# (CSharp)

Below is a sample code which is used to create a custom SQL exception with custom message. The parameter accepts the message to be thrown. It is mostly used in Unit testing scenario where you need to validate for a custom message.

Sample Code
private SqlException GetSqlException(string message)
{
    SqlErrorCollection collection = Construct();
    SqlError error = Construct(-2, (byte)2, (byte)3, "Server", message, "Prcedure", 100, (uint)1);

    typeof(SqlErrorCollection)
        .GetMethod("Add", BindingFlags.NonPublic | BindingFlags.Instance)
        .Invoke(collection, new object[] { error });

    var e = typeof(SqlException)
        .GetMethod("CreateException", BindingFlags.NonPublic | BindingFlags.Static, null, CallingConventions.ExplicitThis, new[] { typeof(SqlErrorCollection), typeof(string) }, new ParameterModifier[] { })
        .Invoke(null, new object[] { collection, "11.0.0" }) as SqlException;

    return e;
}
private T Construct(params object[] p)
{
    return (T)typeof(T).GetConstructors(BindingFlags.NonPublic | BindingFlags.Instance)[0].Invoke(p);
}