2016-09-29 6 views
0

Я работаю над старым классическим сайтом ASP и столкнулся с проблемой. Я могу запрашивать таблицы базы данных, но не виды.Не удалось запросить представление SQL

Этот запрос на столе возвращает правильное количество строк:

Set rs = Server.CreateObject("ADODB.Recordset") 
sqlQuery = "SELECT * FROM tblContent;" 
rs.Open sqlQuery, conn, 1, 2 
response.write "q1 cnt = " & rs.RecordCount 

тот же запрос на представление возвращает -1:

Set rs = Server.CreateObject("ADODB.Recordset") 
sqlQuery = "SELECT * FROM myView;" 
rs.Open sqlQuery, conn, 1, 2 
response.write "q2 cnt = " & rs.RecordCount 

Оба запроса возвращают правильное количество строк при запуске из SQL Server Management Studio, но только один работает при вызове с веб-страницы .asp. То же самое относится к всем таблицам и представлениям в БД (я тестировал полдюжины таких).

Может кто подскажет, что здесь происходит?

+1

Возможным обходным путем является для подсчета строк на уровне SQL. Вы могли бы использовать в качестве запроса 'SELECT COUNT (*) как myrecordcount FROM myView', и вы можете отобразить значение с помощью' rs («myrecordcount») ' – John

+0

@John: Thanks. Я все еще озадачен этим, но ваше обходное решение делает именно то, что мне нужно, если вы сделаете это ответом, я приму это. Приветствия. – Robert

+1

Обратите внимание, что запрос вида, вероятно, * does * возвращает правильные строки; это просто свойство '.RecordCount', которое не получает правильное значение. Таким образом, еще один способ - передать результаты в массив (с помощью «GetRows'), а затем использовать' UBound() '. – Martha

ответ

1

ОК, вот мой комментарий как ответ

Это обходной путь, это не объясняет, почему свойство recordcount не работает с представлениями, но вы можете использовать SQL-запрос для подсчета ваших строк, например

Set rs = Server.CreateObject("ADODB.Recordset") 
sqlQuery = "SELECT COUNT(*) as myrecordcount FROM myView;" 
rs.Open sqlQuery, conn, 1, 2 
response.write "q2 cnt = " & rs("myrecordcount") 
-1

Вы запрашиваете редактируемый набор записей, который может сбой при просмотре. Попробуйте открыть по умолчанию вперед только для чтения записей

rs.Open sqlQuery, conn, adOpenForwardOnly, adLockReadOnly 

или

rs.Open sqlQuery, conn, 0, 1 
+0

Спасибо, но это еще возвращает -1. – Robert

+3

«Свойство RecordCount вернет -1 для прямого курсора» (см. Https://msdn.microsoft.com/de-de/library/ms676701(v=vs.85).aspx), поэтому, пожалуйста, удалите это неверное -Информация. (Убирателю должно быть стыдно) –

 Смежные вопросы

  • Нет связанных вопросов^_^