Well I dont know where the byte[] is being returned, since I only get it on
the live box. But I think the error is thrown when I am trying to convert
the return values from the ADS call to string which works fine on my
production box. Here is the complete function.
Thanks a lot for your help.Please help me do the right conversion.
public DataSet GetFilteredADDomainUsers_memdatabase(String strFirstName,
String strLastName)
{
DataSet ds = new DataSet();
int bUserExists = 0;
try
{
String ADPath = ConfigurationSettings.AppSettings["ADPath"].ToString();
String ADUser = ConfigurationSettings.AppSettings["ADUser"].ToString();
String ADPass = ConfigurationSettings.AppSettings["ADPass"].ToString();
DirectoryEntry entryRoot = new DirectoryEntry("LDAP://RootDSE", ADUser,
ADPass);
string domain = entryRoot.Properties["defaultNamingContext"][0].ToString();
DirectoryEntry searchRoot = new DirectoryEntry("LDAP://" + domain);
if (searchRoot != null)
{
DirectorySearcher search = new DirectorySearcher(searchRoot);
SearchResult result;
//search.Filter = GetFilterString(strFilter);
search.Filter = "(&(objectClass=Person)(&(sn=" + strLastName +
"*)(givenName=" + strFirstName + "*)))";
search.PropertiesToLoad.Add("samaccountname");
search.PropertiesToLoad.Add("sn");
search.PropertiesToLoad.Add("displayName");
search.PropertiesToLoad.Add("givenName");
search.PropertiesToLoad.Add("physicalDeliveryOfficeName");
search.PropertiesToLoad.Add("mail");
//SearchResult result;
SearchResultCollection resultCol = search.FindAll();
if (resultCol != null)
{
ds.Tables.Add("tblADsUsers");
ds.Tables["tblADsUsers"].Columns.Add("ADsUser",
Type.GetType("System.String"));
ds.Tables["tblADsUsers"].Columns.Add("ADsDisplayName",
Type.GetType("System.String"));
ds.Tables["tblADsUsers"].Columns.Add("ADsFirstName",
Type.GetType("System.String"));
ds.Tables["tblADsUsers"].Columns.Add("ADsLastName",
Type.GetType("System.String"));
ds.Tables["tblADsUsers"].Columns.Add("ADsOffice",
Type.GetType("System.String"));
ds.Tables["tblADsUsers"].Columns.Add("ADsEmailAddress",
Type.GetType("System.String"));
//SqlCommandBuilder mySqlCommandBuilder = new SqlCommandBuilder(sqlAdapter);
//sqlAdapter.MissingSchemaAction = MissingSchemaAction.AddWithKey;
for (int counter = 0; counter < resultCol.Count; counter++)
{
result = resultCol[counter];
if (result.Properties.Contains("samaccountname"))
{
String tmpUser;
tmpUser = result.Properties["samaccountname"][0].ToString();
bUserExists = CheckExistingUser(tmpUser.ToLower());
if (bUserExists == 0)
{
DataRow row = ds.Tables["tblADsUsers"].NewRow();
row["ADsUser"] = tmpUser;
if (result.Properties.Contains("displayName"))
{
row["ADsDisplayName"] = (String)result.Properties["displayName"][0];
}
else
{
row["ADsDisplayName"] = " ";
}
if (result.Properties.Contains("givenName"))
{
row["ADsFirstName"] = (String)result.Properties["givenName"][0];
}
else
{
if (result.Properties.Contains("displayName"))
{
row["ADsFirstName"] = (String)result.Properties["displayName"][0];
}
else
{
row["ADsFirstName"] = " ";
}
}
if (result.Properties.Contains("sn"))
{
row["ADsLastName"] = (String)result.Properties["sn"][0];
}
else
{
row["ADsLastName"] = " ";
}
if (result.Properties.Contains("physicalDeliveryOfficeName"))
{
row["ADsOffice"] =
(String)result.Properties["physicalDeliveryOfficeName"][0];
}
else
{
row["ADsOffice"] = " ";
}
if (result.Properties.Contains("mail"))
{
row["ADsEmailAddress"] = (String)result.Properties["mail"][0];
}
else
{
row["ADsEmailAddress"] = " ";
}
ds.Tables["tblADsUsers"].Rows.Add(row);
}
else
{
nUserExist++;
}
}
}
if (ds.Tables["tblADsUsers"].Rows.Count > 0)
{
return ds;
}
else
{
return null;
}
}
}
}
catch (Exception ex)
{
strError = ex.Message;
}
return null;
}
Peter Rilling said:
Your snippet contains not references to a byte[] so I am not sure about
the context, but bytes do not represent a string because a string takes
into account some type of encoding such as unicode or ascii.
You might want to take a look at Encoding.GetString(). If you know now
the bytes were encoded, then the Encoding (or a derived) class should
allow you convert to a string.
Imran Aziz said:
Hello All,
I am getting the following error on our production server, and I dont
get the same error on the development box.
Unable to cast object of type 'System.Byte[]' to type 'System.String'.
here is the code that I used to create a table and then add columns to it
later, later I populate the rows in the table.
since its happening on the production box, so I cannot seem to debug it
corrently as to where the error is coming from.
ds.Tables.Add("tblADsUsers");
ds.Tables["tblADsUsers"].Columns.Add("ADsUser",
Type.GetType("System.String"));
ds.Tables["tblADsUsers"].Columns.Add("ADsDisplayName",
Type.GetType("System.String"));
ds.Tables["tblADsUsers"].Columns.Add("ADsFirstName",
Type.GetType("System.String"));
ds.Tables["tblADsUsers"].Columns.Add("ADsLastName",
Type.GetType("System.String"));
ds.Tables["tblADsUsers"].Columns.Add("ADsOffice",
Type.GetType("System.String"));
ds.Tables["tblADsUsers"].Columns.Add("ADsEmailAddress",
Type.GetType("System.String"));
Thanks a lot.
any help would be great.
Imran.