Français


Français


Base de connaissances

Impact des types de curseurs ADO sur un driver ODBC en ASP


KB-LJW-DB-101



  




Articles et ressources connexes




Architecture ADO / OLE DB / ODBC en ASP Classic

 Cliquez pour classer par colonne
ComposantTypeExemples
1. Application ASPLogique fonctionnelleFichiers *.asp
2. ADOAPI d'accès aux donnéesN/A (librairie standardisée)
3. OLE DBProvider / adaptateurProvider=MSDASQL;
Provider=Microsoft.ACE.OLEDB.12.0;
Provider=SQLOLEDB;
4. ODBCDriver / piloteDriver={MariaDB ODBC 3.2 Driver};
Driver={MySQL ODBC 5.1 Driver};
5. DonnéesFichier ou Moteur de Base de donnéesMariaDB Server 11.4
Microsoft SQL Server
Fichier *.mdb
Fichier *.xlsx


Rôle de chaque couche




Flux de données ADO + OLE DB + ODBC en ASP Classic


Fonctionnement général



Couche ADO



Couche OLE DB



Couche ODBC




Les types de curseurs ADO




Impacts du type de curseur ADO






Comment tirer avantage des curseurs ADO en ASP ?

PHP n'est pas concerné par ADO + ODBC


PHP
<?php
$conn = new COM("ADODB.Connection");
$conn->Open("Provider=MSOLEDBSQL;Server=localhost;Database=TestDB;Trusted_Connection=Yes;");
?>


ASP.NET n'est pas concerné par ADO + ODBC



CursorType permet un code ASP fiable et prévisible



Compatibilité des fonctionnalités ADO par Curseur


 Cliquez pour classer par colonne
Méthode / Propriété ADO0=Forward-Only (par défaut)3=Static1=Keyset2=Dynamic
MoveNext Oui Oui Oui Oui
MoveFirst Non Oui Oui Oui
MoveLast Non
(ou comportement non garanti)
 Oui Oui Oui
MovePrevious Non Oui Oui Oui
AbsolutePosition Non Oui Oui Oui
PageSize / PageCount / AbsolutePage Non Oui Oui Oui
RecordCount Inexploitable
(renvoie -1)
 Fiable Fiable Fiable
Bookmark / Supports(adBookmark) Non Oui Oui Oui
Sort Non
(provoque bascule client-side)
 Oui
(client-side stable)
 Oui Oui
Filter Non
(provoque bascule client-side)
 Oui Oui Oui
Édition (Update, AddNew, Delete) Non
(Read-Only)
 Oui
(mais snapshot)
 Oui
(lignes visibles)
 Oui
(réactif)
Voir les nouvelles lignes insérées après l'ouverture Non Non Non Oui
Stabilité concurrentielle des donnéesTrès élevée (flux figé)Élevée (snapshot)MoyenneFaible


  • BOF
  • EOF
  • MoveNext
  • Fields
  • Fields.Item
  • Fields.Item("fieldname").Value
  • GetRows
  • GetString
  • State
  • ActiveConnection
  • Source
  • CursorType (retourne 0)
  • CursorLocation
  • LockType
  • CacheSize
  • MarshalOptions



Conseils pour un code ASP Classic fiable avec ADO + ODBC


Utiliser un CursorType=0 (adOpenForwardOnly) pour les lectures simples d'un Recordset


ASP CLASSIC
<%
'Ouvrir la connection
Set dbConn = Server.CreateObject("ADODB.Connection")
dbConn.Open dbConnString

'Ouvrir le Recordset en mode "Forward-Only" via .Open()
Set rs = Server.CreateObject("ADODB.Recordset")
rs.Open strSQL, dbConn

''Ou bien : ouvrir le Recordset en mode "Forward-Only" via .Execute()
'Set rs = dbConn.Execute(strSQL)
%>


  • BOF
  • EOF
  • MoveNext
  • Fields
  • Fields.Item
  • Fields.Item("fieldname").Value
  • GetRows
  • GetString
  • State
  • ActiveConnection
  • Source
  • CursorType (retourne 0)
  • CursorLocation
  • LockType
  • CacheSize
  • MarshalOptions

ASP CLASSIC
<%
'Si le Recordset contient des enregistrements
if ((NOT rs.BOF) AND (NOT rs.EOF)) then
   do while NOT rs.EOF
      'Renvoyer la valeur du champ "field_1"
      Response.Write rs("field_1")
      'Passer à l'enregistrement suivant
      rs.MoveNext
   loop
end if
%>




Spécifier le CursorType avant chaque appel à rs.Open

ASP CLASSIC
<%
Set rs = Server.CreateObject("ADODB.Recordset")
'Spécifier le type de curseur
rs.CursorLocation = 3 'adUseClient (de préférence, car les curseurs côté serveur dépendent du Driver ODBC)
rs.CursorType     = 3 'adOpenStatic (ou bien 1 ou 2 selon vos besoins)
rs.LockType       = 1 'adLockReadOnly (le plus rapide si aucune écriture)

'Ouvrir le Recordset de manière scrollable/déplaçable
rs.Open strSQL, dbConn
%>


  • RecordCount
  • MoveFirst
  • MoveLast
  • MovePrevious
  • AbsolutePage
  • PageSize
  • PageCount
  • Sort
  • Filter

ASP CLASSIC
<%
'Le recordset a été mis en cache mémoire côté client grâce au rs.CursorType différend de 0
'La propriété .Recordcount et donc calculable et reflète le nombre réel de lignes récupérées
if (rs.RecordCount <> 0) then
   'Faire quelquechose
end if
%>




Spécifier le CursorType=3 (adOpenStatic) pour tout déplacement ou tri dans un Recordset


  • RecordCount
  • MoveFirst
  • MoveLast
  • MovePrevious
  • AbsolutePage
  • PageSize
  • PageCount
  • Sort
  • Filter





Spécifier le CursorLocation=3 (adUseClient) pour tout usage de rs.Sort et rs.Filter




Gestion des curseurs ADO avec le Driver Microsoft SQL Server




Gestion des curseurs ADO avec le Driver Microsoft Access




Gestion des curseurs ADO avec le Driver MySQL



Curseur par défaut du Driver MySQL ODBC 3.51



Curseur par défaut du Driver MySQL ODBC 5.3



Utiliser le mode Forward-Only (streaming) côté serveur (moteur MySQL)


Mise en oeuvre

  • 1048576 (NO_CACHE)
  • 2097152 (FORWARD_CURSOR)



Gestion des curseurs ADO avec le Driver MariaDB



Curseur par défaut du Driver MariaDB ODBC 3.1



Curseur par défaut du Driver MariaDB ODBC 3.2

ODBC-290 = Cursor type now defaults to SQL_CURSOR_FORWARD_ONLY as it is required by specs. 3.1.x series has default cursor type SQL_CURSOR_STATIC.



Utiliser le mode Forward-Only (streaming) côté serveur (moteur MariaDB)


Comportement avec MariaDB ODBC 3.1


Comportement avec MariaDB ODBC 3.2


Mise en oeuvre

  • 1048576 (NO_CACHE)
  • 2097152 (FORWARD_CURSOR)
  • FORWARDONLY=1;
  • NO_CACHE=1;





Au service de votre ASP Classic





Préférences de vie privéePréférences relatives à vos données personnelles

NOTE : Vos changements seront appliqués dès la prochaine page que vous visiterez/chargerez.

Votre vie privée est précieuse : nous la respectons.

En utilisant ce site, vous acceptez que nous utilisions des statistiques anonymes pour analyser notre trafic et améliorer votre expérience de navigation sur notre site, ainsi que des technologies et cookies pour personnaliser le contenu. Ces informations anonymes peuvent être partagées avec nos partenaires de médias sociaux et d'analyse de confiance.

  • Nous ne collectons aucune donnée nominative.
  • Nous ne stockons aucun mot de passe.
  • Nous utilisons une connexion sécurisée de haut niveau.