3

I have a datable code to generate a string, which is sb.ToString().

DataTable dt = dbaccess.GetDataTable("TEST"); // get datatable
List<DataRow> drlist = dt.AsEnumerable().ToList(); // each row only has one element.
StringBuilder sb = new StringBuilder(); 
foreach (DataRow row in drlist)
{
    foreach (string str in row.ItemArray)
    {
        sb.Append(str);
    }
}

The datatable is

NULL
0
138
337
1666
1680
2511
8113

You see that there is "NULL" to cause the error "Unable to cast object of type 'System.DBNull' to type 'System.String'. How to fix it?

3 Answers3

4

Try this:

foreach (object str in row.ItemArray) 
{ 
    if (DbNull.Value.Equals(str))
       sb.Append("NULL");
    else
       sb.Append(str.ToString()); 
} 
Brian Mains
  • 50,520
  • 35
  • 148
  • 257
1

Change your loop:

foreach(var obj in row.ItemArray)
{
    if(obj is string) sb.Append(obj as string);
}
Justin Niessner
  • 242,243
  • 40
  • 408
  • 536
1
            if(!row.IsNull("column"))
            {
                foreach (string str in row.ItemArray)
                {
                    sb.Append(str);
                }                
            }
AmandaSai98b
  • 485
  • 1
  • 7
  • 17