A known issue that affected SQLServer 6.5 (and I'm guessing 7.0) is that if you open a cursor using a prepare/execute and start reading through it, if you perform a commit or rollback and then try to continue reading from the cursor (perform another fetchrow) you will get the error you describe. I.E. The cursor is closed by the commit/rollback.
I don't know if this is your problem but it's worth checking.