Für mich gehört das Lesen an den Anfang der Schleife, da ohne GOTO bei Prüfbedingungen per "ITER" immer an den Schleifenanfang gesprungen werden kann.
Wenn das Lesen am Ende liegt, sehe ich dann häufig z.B. 2x Fetch/Read, 1x vor der Schleife und 1x am Ende und mitten drin komplizierte If's um für Prüfungen oder zum Überlesen wieder an den Ende-Read zu kommen.

In anderen Sprachen gibt es auch den "break" um eine Schleife zu verlassen und einen "continue" um an den Schleifenanfang zu gehen. Als Schleifen gibts dann "while(true) {}" oder "for(; ; ) {}" und niemand hält dies für schlechten Stil. Dies hat auch nichts mit RPG-Denke zu tun.

Was spricht also gegen Break und Iter?
Damit wird ein Code viel übersichtlicher und vor allem klarer.

Tja, und was Abbruch Bedingungen angeht, so kann man da auch noch mit Monitor-Gruppen arbeiten. Dies entspricht dann "Try {} catch (ex) {}", wobei der Finally{} noch fehlt.
Auch damit kann ich dann Close() bei Abbrüchen erreichen.

In ILE habe ich mir z.B. für das FileHandler-Problem das Konzept verinnerlicht:

dow CallRead(Buffer);
enddo;

dcl-proc CallRead;
dcl-pi *n ind;
Buffer ...
end-pi;

fetch ... into Buffer;
if sqlcode = *zero;
return *on;
endif;
// Logging !
return *off;
end-proc;

Somit habe ich den Read wieder am Schleifenanfang und kann Iter/Leave verwenden.

Dies kann man dann ebenso für alle anderen SQL's lösen und im Code liest sich das dann so:
if CallUpdate(Buffer);
endif;
if CallInsert(Buffer);
endif;
if CallDelete(Buffer);
endif;

Dann sieht's schon fast so schön wie C# aus. Und dies mache ich schon eine halbe Ewigkeit (auch seit RPG) so.