Limitations

Many of the limitations are due to the fact that HTTP communication is state-less by nature, ie. no re-usable persistent database connection can be established.

  • No support for transactions.
  • Limited cursor support.
  • Complex queries can cause timeouts in the server scripts or internet connection. Re-issuing the query can solve the problem if the resultset or part of it is cached in the database server.
  • SQLCancel from another thread does not cancel an executing query and the SQLExecute or SQLExecuteDirect command will return when data is received or a timeout occurs (script or connection). It does stop data retrieval.
  • Parameter binding (SQLPrepare, SQLBindParameter) is performed entirely on the client side, not on the database side. This has a few minor side-effects:

    - SQL syntax errors are reported when SQLExecute or SQLNumResultCols is called. SQLNumResultCols before SQLExecute will actually execute the statement with “WHERE 0=1″ clauses and NO GROUP AND ORDER clauses instead of the full statement. Syntax errors in these clauses will therefor only be reported when calling SQLExecute.

HTTP is byte oriented. Wide character support is done through UTF8. DSN parameters determine if and how character translations are performed. Supported translations are:

- 8-bit system to utf8

- 16 bit unicode to utf8

- 16 bit unicode to 8-bit system

No translation between different 8-bit character sets is supported. When using “8-bit system” character set, the one used on client, HTTP server and database needs to be the same.

Database metadata is transferred when connecting to the database and cached locally. The cache is refreshed when executing data definition statements. Changes made to the database structure from other clients do not affect the metadata cache and can cause the cache to be out of date. This can result in strange errors, for example, when trying to open a modified table. Dropping the connection and reconnecting solves the problem.

ODBCHTTP is compatible with ODBC version 3.5. Because of the inherent limitations ODBCHTTP is not targeted at on-line transactional applications. Following functions are not implemented:

  • SQLBulkOperations
  • SQLGetCursorName
  • SQLSetCursorName
  • SQLDescribeParam

Bookmarks, named cursors and block cursors are not supported.