Unable to cast object of type 'System.Byte[]' to type 'System.String'.

I

Imran Aziz

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.
 
P

Peter Rilling

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.
 
I

Imran Aziz

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.
 
I

Imran Aziz

I am using the LDAP provider to get list of properties for users. the code
works fine on my development machine but when moved to production I get a
conversion error of.

Unable to cast object of type 'System.Byte[]' to type 'System.String'.

Here is the code that generates error.

SearchResult result;
String tmpUser;

tmpUser = result.Properties["samaccountname"][0].ToString();

If I use Convert.ToString() to convert it I get System.byte[] as the return.

Can anyone please help me with this issue.

Imran.
 
Joined
Jan 19, 2011
Messages
1
Reaction score
0
The blog on this Developers website may shed some light:

(Put this into Google):

"HellSpawn Developments" Unable to cast object of type 'System.String' to type 'System.String[]'
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,982
Messages
2,570,186
Members
46,742
Latest member
AshliMayer

Latest Threads

Top