ASP Classic и SQL Server 2008 дают странный ответ - PullRequest
1 голос
/ 06 октября 2009

Похоже, эта ошибка началась с тех пор, как мы обновились до 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 ]

1 голос
/ 06 октября 2009

Сортировка:

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
1 голос
/ 06 октября 2009

Возможно, вам придется попробовать переместить набор записей? например,

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 - и затем вы можете справиться с этим, как хотите.

...