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

Discussion in 'ASP .Net' started by Imran Aziz, Sep 13, 2005.

  1. Imran Aziz

    Imran Aziz Guest

    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.
     
    Imran Aziz, Sep 13, 2005
    #1
    1. Advertisements

  2. 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.
     
    Peter Rilling, Sep 13, 2005
    #2
    1. Advertisements

  3. Imran Aziz

    Imran Aziz Guest

    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;

    }


     
    Imran Aziz, Sep 13, 2005
    #3
  4. Imran Aziz

    Imran Aziz Guest

    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.
     
    Imran Aziz, Sep 13, 2005
    #4
  5. Imran Aziz

    ljenner01

    Joined:
    Jan 19, 2011
    Messages:
    1
    Likes Received:
    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[]'
     
    ljenner01, Jan 19, 2011
    #5
    1. Advertisements

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 (here). After that, you can post your question and our members will help you out.