Une solution simple pour utiliser la méthode SQL COUNT. Cela suppose que vous voulez le nombre de lignes et non les données elles-mêmes.
<%
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
%>
Ceci renvoie une ligne avec une seule valeur appelée "Total". (Lire la suite si vous avez besoin à la fois du nombre de lignes et.)
Votre code de requête utilise un RecordSet par défaut, qui retourne les données en mode "forward-only" pour plus d'efficacité. Il passera par rangée, mais ne connaîtra pas le nombre réel. (Ce mode définit également RecordSet.RecordCount sur -1, ce champ n'est donc pas utile pour vous.)
Le paramètre "Cursor Type" de RecordSet.Open vous permet de passer en mode "Keyset" (valeur de paramètre 1), définit le champ RecordCount sur le nombre de lignes de données. (« Type Lock » et les paramètres « Type de commande » inclus pour être complet, mais ils ne figurent pas dans cette réponse.)
RecordsetObject.Open "TableName|SQLStatement", ConnectionObject [,Cursor Type] [,Lock Type] [,Command Type]
Ajouter ce paramètre à l'appel RecordSet.Open de votre code, puis vérifier 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
%>
Si la performance de base de données signifie quoi que ce soit à votre situation, les RecordSet.GetRows() méthode est beaucoup plus efficace.
<%
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
%>
Cela pourrait fonctionner, mais il peut aussi revenir -1. Par exemple, l'ensemble de lignes par défaut firehose du serveur SQL ne génère pas de nombre de lignes tant que tous les enregistrements n'ont pas été consommés par l'appelant. – AnthonyWJones
Gardez à l'esprit que vous devez activer nocount. voir http://stackoverflow.com/a/16617637/356544 – Slider345