[unixODBC-support] What is the Nature of Data Source Names under unixODBC?

Nick Gorham nick at lurcher.org
Fri May 8 20:05:40 BST 2009

Ken Resander wrote:
> About 4-5 years ago I worked on an Intelli-sense type interactive 
> input system
> for databases DB2, Mimer, MySQL and SQL Server that ran on Windows. I 
> am now porting this, all other Windows projects and myself to Ubuntu.
> Started porting the DB stuff about two weeks ago. Here are the connect 
> calls on Windows, which I assumed would work Ubuntu under unixODBC. 
> Only one did.
> // first three parameters: dsn userid password
> connectSrv ( "MySQL_1" , "root" , "" , &sh )
> connectSrv ( "DB2_1" , "db2admin" , "abcd" , &sh )
> connectSrv ( "kenmimer" , "mimer_store" , "abcd" , &sh )
> connectSrv ( "ASA 9.0 Sample" , "" , "" , &sh )
> I could connect to MySQL more or less right away, but spent about a 
> week on DB2 and Mimer SQL. They both came up with SQLConnect error 
> messages 'DB2_1 not a valid database alias name' and 'kenmimer is not 
> a valid database name'. On Windows I had been conditioned to think 
> that a DSN is just an arbitrary shorthand notation for connection 
> attributes passed from the application to the ODBC system via the 
> SQLConnect, so I just could not understand why it did not work. As a 
> last resort, I changed the DB2_1 dsn to SAMPLE, which is the name of 
> the DB2 sample database. It worked. Mimer SQL worked too when I 
> changed the kenmimer dsn to the name of Mimer's sample database.
> MySQL_1 is not a name of one of MySQL's sample databases, but it worked. 
> I have just managed to get SQL Anywhere to connect to its demo 
> database using the following /etc/odbc.ini:
> [SQL Anywhere 11 Demo]
> UserID=DBA
> Password=sql
> DatabaseFile=/home/ken/sa11_samples/sqlanywhere/demo.db
> ServerName=demo_ken
> StartLine=/opt/sqlanywhere11/bin32/dbeng11
> Description=SQL Anywhere 11 Sample Database
> Driver=/opt/sqlanywhere11/lib32/libdbodbc11.so
> It did not work when I put [sqlanywheredsn] into /etc/odbc.ini and 
> into my SQLConnect call. Received message 'sqlanywhere not a dsn', so 
> again, it seems the dsn has to be a database name.
> What are the rules? The DSN can be an arbitrary string in MySQL, but 
> has to be a databasename for the other databases. Is the decision made 
> by unixODBC, the driver or both?

Entirely down to the driver. unixODBC works as you are expecting it to.


More information about the unixODBC-support mailing list