Здесь происходит много всего ...
Вы используете команду 'cmd' для зацикливания записей с помощью устройства чтения данных, а затем используете ту же команду 'cmd' внутри оператора while для выполнения оператора вставки. Вы ранее объявили другую команду «cmdAdd», но, кажется, нигде ее не используете; это то, что вы намеревались использовать для оператора вставки?
Вы также закрываете свое соединение для передачи данных внутри цикла while, который выполняет итерации по вашему устройству чтения данных. Вы только прочитаете одну запись и затем закроете соединение с вашей базой данных таким образом; если ваше условие для вставки не выполнено, вы ничего не напишите в базу данных.
EDIT:
Вы действительно должны открыть и закрыть соединение с базой данных вне foreach на узлах xmlnodes. Если у вас есть 10 узлов для зацикливания, соединение БД будет открываться и закрываться 10 раз (ну, пул соединений, вероятно, предотвратит это, но все же ...)
Вы также загружаете всю таблицу 'posts' в набор данных, по-видимому, без причины. Вы не изменяете ни одно из значений в наборе данных, но неоднократно вызываете обновление для него (в «save the shanges»). Если таблица «posts» даже удаленно велика, это будет бесполезно высасывать много памяти (на портативном устройстве, не меньше).