diff --git a/src/main/java/com/microsoft/sqlserver/jdbc/SQLServerResultSet.java b/src/main/java/com/microsoft/sqlserver/jdbc/SQLServerResultSet.java index e937b27c3..45745eb49 100644 --- a/src/main/java/com/microsoft/sqlserver/jdbc/SQLServerResultSet.java +++ b/src/main/java/com/microsoft/sqlserver/jdbc/SQLServerResultSet.java @@ -962,10 +962,19 @@ public boolean next() throws SQLServerException { // For scrollable cursors, next() is just a special case of relative() if (!isForwardOnly()) { - if (BEFORE_FIRST_ROW == currentRow) - moveFirst(); - else - moveForward(1); + do { + if (BEFORE_FIRST_ROW == currentRow) + moveFirst(); + else + moveForward(1); + + // Only attempt rowDeleted() if result set is updatable. + try { + verifyResultSetIsUpdatable(); + } catch (SQLServerException e) { + break; + } + } while (rowDeleted()); // repeat this if the row has been deleted beforehand, for scrollable & updatable resultsets. boolean value = hasCurrentRow(); loggerExternal.exiting(getClassNameLogging(), "next", value); return value;