Одно простое решение для использования метода SQL COUNT. Это предполагает, что вы хотите количество строк, а не самих данных.
<%
Set rsscroll = Server.CreateObject("ADODB.Recordset")
Dim strSQLscroll, rsscroll, intRow
strSQLscroll = "SELECT COUNT(*) AS Total FROM tblItems WHERE expiration_date > getdate();"
rsscroll.open strSQLscroll, oConn
response.write rsscroll("Total")
rsscroll.close: set rsscroll = nothing
oConn.close: set oConn = nothing
%>
Это возвращает одну строку с единственным значением, называемым «Всего». (Читайте дальше, если вам нужны оба числа строк и данные.)
В вашем коде запроса используется RecordSet по умолчанию, который возвращает данные в режиме «только вперед» для повышения эффективности. Он будет шаг за шагом, но не знает фактического счета. (Этот режим также устанавливает значение RecordSet.RecordCount равным -1, поэтому поле вам не полезно.)
Параметр RecordSet.Open «Cursor Type» позволяет вам перейти в режим «Keyset» (значение параметра 1), который делает, установите для поля RecordCount количество строк данных. («Тип замка» и «Тип команды» Параметры для полноты, но они не фигурируют в этом ответе.)
RecordsetObject.Open "TableName|SQLStatement", ConnectionObject [,Cursor Type] [,Lock Type] [,Command Type]
Добавить этот параметр в RecordSet.Open вызова вашего кода, а затем проверить RecordCount.
<%
Set rsscroll = Server.CreateObject("ADODB.Recordset")
Dim strSQLscroll, rsscroll, intRow
strSQLscroll = "SELECT * FROM tblItems where expiration_date > getdate() order by expiration_date desc;"
rsscroll.open strSQLscroll, oConn, 1
intRow = rsscroll.RecordCount
' ... do something with intRow
rsscroll.close: set rsscroll = nothing
oConn.close: set oConn = nothing
%>
Если производительность базы данных означает, что что-нибудь к вашей ситуации, RecordSet.GetRows() метод намного более эффективным.
<%
Dim rsscroll, intRow, rsArray
Set oConn = CreateObject("ADODB.Connection")
oConn.open "<connection string>"
strSQLscroll = "SELECT * FROM tblItems where expiration_date > getdate() order by expiration_date desc"
Set rsscroll = conn.execute(strSQLscroll)
if not rsscroll.eof then
rsArray = rsscroll.GetRows()
intRow = UBound(rsArray, 2) + 1
response.write "rows returned: " & intRow
' ... do any other operations here ...
end if
rsscroll.close: set rsscroll = nothing
oConn.close: set oConn = nothing
%>
Это может работать, но он может также возвращать -1. Например, набор строк по умолчанию для сервера firehose по умолчанию не будет давать количество строк до тех пор, пока все записи не будут использованы вызывающим абонентом. – AnthonyWJones
Имейте в виду, что вам необходимо установить nocount. см. http://stackoverflow.com/a/16617637/356544 – Slider345