Limitations

La plus part des limitations sont liées au fait que les communications HTTP sont par nature sans mémoire d’état, c’est à dire qu’ il est impossible d’établir une connexion persistante avec la base de données.

  • Pas de support pour les transactions
  • Support limité pour les curseurs.
  • Les requêtes complexes peuvent entrainer des dépassements des limites de temps d’exécution de script ou de connexion internet. Répéter la requête peut résoudre le problème si le résultat, ou une partie de celui-ci, est en mémoire cache du serveur de base de données.
  • SQLCancel émis d’une autre tâche n’arrête pas la requête en cours et la commande SQLExecute ou SQLExecuteDirect n’arrêtera que quand des données seront reçu ou en cas d’erreur de dépassement de temps (script ou connexion). Cependant, la commande annulé arrêtera la réception de données suite à SQLCancel.
  • La liaison des paramètres (SQLPrepare, SQLBindParameter) est effectué entièrement côté client et non pas du côté de la base de données. Ceci cause quelques petits effets secondaires:
    • les erreurs syntaxe SQL sont détectées quand SQLExecute ou SQLNumResultsCols est appelé. Un appel SQLNumResultsCols avant un SQLExecute va en effet exécuter la requête avec la clause “WHERE 0=1″ et sans les clauses “GROUP BY” et “ORDER BY”, au lieu de la requête entière. Les erreurs de syntaxe SQL dans ces clauses modifiées seront donc détectées ultérieurement suite à SQLExecute.

Les communications HTTP utilisent des octets. Support pour unicode n’est possible qu’en utilisant UTF8. Les paramètres DSN déterminent si et comment les caractères sont traduits. Les traductions possibles sont:

- 8 bit système vers utf8

- 16 bit unicode vers utf8

- 16 bit unicode vers 8 bit système

La traduction entre différent jeux de caractères n’est pas supportée. Si on utilise “8 bit système”, les jeux de caractères utilisés côté client, serveur HTTP et base de données doivent être identique.

Les metadonnées de la base de données sont transmises au client pendant la connexion à la base de données et stockées en mémoire cache. Cette mémoire cache est réactualisée suite à des requêtes de définition de structure de données. Des changements de structure faites par des autres clients ne sont pas détectés et peuvent rendre les metadonnées en mémoire cache incorrect. Ceci peut entraîner des erreurs inattendues, par exemple, en ouvrant une table modifiée. Se déconnecter et reconnecter à la base données résoudra ce problème.

ODBCHTTP est compatible avec la version 3.5 du standard ODBC. A cause des limitations inhérentes d’ODBCHTTP, ce pilote n’est pas destiné à être utilisé avec des applications transactionnelles en ligne. Les fonctions suivantes ne sont pas implementées:

  • SQLBulkOperations
  • SQLGetCursorName
  • SQLSetCursorName
  • SQLDescribeParam

Les marque-pages, curseurs nommées et curseurs de bloc ne sont pas supportés.