| A simple query should be a nobrainer right now. But what if
     your program runs on a system where you can't be sure which datasource names
     are configured? Then you should use SQLDataSources().
     After allocating a environment handle you may use this to find out about the
     DSN and the supplied description for the datasource. As ODBC knows systemwide and userwide datasources, you need to give a direction
     which datasource types you are looking for. There you may specify either of the 
     following values: 
     
       | SQL_FETCH_FIRST | Sets up SQLDataSources()to lookup the first of all
           available datasources (either user or systemwide). |  
       | SQL_FETCH_FIRST_USER | Sets up SQLDataSources()to lookup the first of the
           available user datasources. |  
       | SQL_FETCH_FIRST_SYSTEM | Sets up SQLDataSources()to lookup the first of the
           available system datasources. |  
       | SQL_FETCH_NEXT | Fetches the next datasource.
           Depending on SQL_FETCH_FIRST_USER,SQL_FETCH_FIRST_SYSTEMorSQL_FETCH_FIRSTthis may only be a user datasource, 
           only a system datasource or one of either. |  So let's have a look on a small function, which will return all available
     datasource names. You may insert this code into the program which you      built before and call it somewhere after you've obtained an environment      handle. 
void OD_ListDSN(void)
{
 char       l_dsn[100],l_desc[100];
 short int  l_len1,l_len2,l_next;
 l_next=SQL_FETCH_FIRST;
 while( SQLDataSources(V_OD_Env,l_next,l_dsn, sizeof(l_dsn),
        &l_len1, l_desc, sizeof(l_desc), &l_len2) == SQL_SUCCESS)
     {
      printf("Server=(%s) Beschreibung=(%s)\n",l_dsn,l_desc);
      l_next=SQL_FETCH_NEXT;
     }
}
 |