If we ignore that you are concatentating strings (please, look at using a StringBuilder - it's a lot more efficient for that kind of thing), then your problem is here:
column_name =RemoveSpecialChars(kvp.Key + ",".TrimEnd(','));
The "column_name" string will always be the last key, followed by a comma...