HDBC-odbc
ODBC driver for HDBC
https://github.com/hdbc/hdbc-odbc
| Stackage Nightly 2026-07-29: | 2.6.0.0 |
| Latest on Hackage: | 2.6.0.0 |
HDBC-odbc-2.6.0.0@sha256:4fbd28f437cb2f1707d77aa81a356870d84407942c89c20c7613f99f3bb0eb5d,2730Module documentation for 2.6.0.0
- Database
- Database.HDBC
HDBC-ODBC
Welcome to HDBC, Haskell Database Connectivity.
This package provides a database backend driver for ODBC. You should be able to use any ODBC front-end with it.
Please see HDBC itself for documentation on use.
This package provides one function in module Database.HDBC.ODBC:
Connect to an ODBC server. For information on the meaning of the passed string, please see: http://msdn2.microsoft.com/en-us/library/ms715433(VS.85).aspx
connectODBC :: String -> IO Connection
For example, you might use connectODBC as follows:
connectODBC "DSN=hdbctest1"
For more information about HDBC-ODBC, please visit the wiki.
Differences from HDBC standard
None known at this time.
MySQL note
Important note for MySQL users:
Unless you are going to use InnoDB tables, you are strongly encouraged to set
Option = 262144
in your odbc.ini (for Unix users), or to disable transaction support in your DSN setup for Windows users.
If you fail to do this, the MySQL ODBC driver will incorrectly state that it supports transactions. dbTransactionSupport will incorrectly return True. commit and rollback will then silently fail. This is certainly NOT what you want. It is a bug (or misfeature) in the MySQL driver, not in HDBC.
You should ignore this advice if you are using InnoDB tables.
For the error “2013: Mysql server has gone away” error message, you’ll have to use withRTSSignalsBlocked from the HDBC-mysql package.
query conn stmStr binds = withRTSSignalsBlocked $ quickQuery conn stmStr binds
Getting Started
Here are some instructions to set up ODBC with a sqlite3 backend, and how to communicate with that database with HDBC-ODBC. These instructions are written to work with Ubuntu 11.10.
First, we’ll need to install the appropriate libraries:
sudo apt-get install unixodbc unixodbc-dev unixodbc-bin
sudo apt-get install libsqliteodbc
Verify that the sqlite ODBC drivers have been set up correctly:
odbcinst -q -d
This should return:
[SQLite]
[SQLite3]
Next, fire up the ODBCConfig too to set up a new DSN:
ODBCConfig
If you want to run the HDBC test suite, then set your DSN to hdbctest,
and set up to connect to a database of your choice, such as an empty file
in the hdbc-odbc/testsrc directory:
touch hdbc-odbc/testsrc/hdbctest.db
You can check that everything is working appropriately in ghci:
ghci> :m + Database.HDBC Database.HDBC.ODBC
ghci> conn <- connectODBC "DSN=hdbctest"
ghci> hdbcDriverName conn
"odbc"
ghci> hdbcClientVer conn
"03.52"
You can then run some tests on your database:
cd testsrc
runhaskell runtests.hs
Contributing
Contributions are welcome! If you would like to contribute, please fork the the github repository, and submit a pull request.
Changes
* Only use Unicode API for getting diagnostic messages when on Windows,
switched to non-Unicode API on other OS.
2.5.1.1 - 6 Apr 2019
* Support for fetching errors from compound statements
* Fix segfault when statement gets finalized by GC during execution of another
one on same connection.
2.5.0.1 - 24 Nov 2016
* Haddock fixes and documentation updates.
2.5.0.0 - 9 Dec 2015
* Support for Unicode diagnostic messages on Windows.
* Added support for getting and setting AutoCommit flag.
2.4.0.1 - 15 May 2015
* Switched to using UTF-8 encoding for binding WCHAR_T values on Linux. Earlier version tried
to use C wchar_t type, which confused some (in particular PostgreSQL) drivers.
2.4.0.0 - 12 Nov 2014
* Changed parameter binding implementation to fix bugs with wide character strings and binary
data not handled well with Microsoft SQL Server on Windows.
* Implemented atomic reference counting to avoid race conditions in native code when running
with -threaded
* Implemented workaround for the SQL Server ODBC Driver deadlock, which occured if cursor over a
statement that was in the process of fetching data over the network got closed.