Assuming your code actually works - I haven't checked - then your problem is simple: you are doing something silly, and I don't know why:
dcColumn.DataType = System.Type.GetType("System.Decimal");
tem = row[column].ToString().Replace(" ", "%");
row[column] = tem;
If you try to assign a string to a decimal field, it will try to convert it: But "1.23%" is not a valid decimal. Hence the runtime error "input string is not in correct format".
So why are you doing this?