Ваша проблема с индексированием, упомянутая Марком, это всего лишь один элемент, но она вызовет проблему. Я бы сказал, глядя на основание, ваша проблема проистекает из того, что вы не обрезали струны. В вашей базе данных, вероятно, нет пробелов, ведущих или заканчивающих ваши данные, поэтому вам нужно сделать что-то вроде:
Dim refsUpdateString as string = RefsUpdate(x).Trim()
Dim paymentsPassedUpdateString as string = PaymentsPassedUpdate(x).Trim()
...
Dim queryUpdatePaymentFlags as String = ("UPDATE OPENQUERY (db,'SELECT * FROM table WHERE ref = ''" & refsUpdateString & "'' AND bookno = ''" & Session("number") & "'' ') SET alpaid = '" & paymentsPassedUpdateString & "', paidfl = 'Y', amountdue = '0' ")
Кроме того, я бы рекомендовал придерживаться способа конкатенации VB и использовать для этого символ &
.