ASP Classic и SQL Server 2008 дают странный ответ
Похоже, эта ошибка началась с тех пор, как мы обновились до SQL Server 2008.
Вставляя в БД и затем возвращая идентичность, я получаю "Предмет не может быть найден в коллекции, соответствующей запрошенному имени или порядковому номеру".
Вот код:
SQL = "INSERT INTO PageFeatures(nPageFeatureFlagId,nPageFeatureFeatureId,nPageFeaturePageId) VALUES(" & nTemplateFlagId & "," & nFeatureId & "," & nPageId & "); SELECT SCOPE_IDENTITY() As nPageFeatureId;"
objrs.open SQL,objConn,1,1
nPageFeatureId = objrs("nPageFeatureId")
objrs.close
Вставка работает, так как запись находится в БД. По какой-то причине он не возвращает идентификатор. Он работает нормально и возвращает идентификатор при работе в SSMS. Но ASP не может видеть возвращенный идентификатор, поэтому какая-то причина.
Любая помощь будет принята с благодарностью!
2 ответа
Сортировка:
SQL = "INSERT INTO PageFeatures(nPageFeatureFlagId,nPageFeatureFeatureId,nPageFeaturePageId) VALUES(" & nTemplateFlagId & "," & nFeatureId & "," & nPageId & ");"
objConn.execute(SQL)
Set oReturnValueRS = objConn.Execute("SELECT SCOPE_IDENTITY()")
nPageFeatureId = oReturnValueRS(0).Value
oReturnValueRS.close : set oReturnValueRS = nothing
Возможно, вам придется попробовать переместить набор записей? например
SQL = "INSERT INTO PageFeatures(nPageFeatureFlagId,nPageFeatureFeatureId,nPageFeaturePageId) VALUES(" & nTemplateFlagId & "," & nFeatureId & "," & nPageId & "); SELECT SCOPE_IDENTITY() As nPageFeatureId;"
objrs.open SQL,objConn,1,1
objrs.NextRecordset
nPageFeatureId = objrs("nPageFeatureId")
objrs.close
Комментарий Радж о внедрении SQL по-прежнему актуален.:)
РЕДАКТИРОВАТЬ: Разработка состоит в том, что здесь есть два набора записей. Первый - пустой, созданный оператором вставки, второй - вызван всем после точки с запятой;. Это поле, которое вы хотите. Итак, изначально ваш objrs привязан к первому из его набора наборов записей (а не строк в наборе записей), вы переходите к NextRecordset - и вы можете тогда справиться с этим, как пожелаете.