<html><body>
<p><tt><font size="2">unixodbc-support-bounces@mailman.unixodbc.org wrote on 01/13/2009 12:13:21 PM:<br>
<br>
> Alan J Batsford wrote:<br>
> ><br>
> > I'm using unixODBC 2.2.14 on CentOS 4.6. Right now I'm using ODBC to<br>
> > connect to postgreSQL 8.2.5 within a C/C++ program, but the DSN is<br>
> > going to change to Oracle soon. I can make a connection and run<br>
> > queries. What's the best way to generically check the connection status?<br>
> ><br>
> > Thanks for all your advise.<br>
> ><br>
> <br>
> You could try using SQLGetConnectAttr with SQL_ATTR_CONNECTION_DEAD.<br>
> <br>
> --<br>
> Peter<br>
> <br>
</font></tt><br>
<tt><font size="2">Thanks, I tried the function out but I can't quite get it to work.</font></tt><br>
<br>
<tt><font size="2">SQLGetConnectAttr is returning -1 both when the connection is down and up. When it's down I call SQLGetDiagRec and recieve a message about the connection being down. But when the connection is up and I try to get the diagnostic message I get an unreadable message. For example my last test was:</font></tt><br>
<tt><font size="2">"[nxDC[rvrMngrlvldatiueoto dniir"</font></tt><br>
<tt><font size="2">with NativeError set to 0.</font></tt><br>
<br>
<tt><font size="2">My call to SQLGetConnectionAttr:</font></tt><br>
<font size="2" face="Courier">char ODBC_str_err[20]; // Not sure how long this needed to be.</font><br>
<font size="2" face="Courier">SQLINTEGER StringLength;</font><br>
<br>
<font size="2" face="Courier">...</font><br>
<br>
<font size="2" face="Courier">ODBC_erg = SQLGetConnectAttr(ODBC_Connection, SQL_ATTR_CONNECTION_DEAD, (SQLPOINTER)ODBC_str_err, sizeof (ODBC_str_err), &StringLength);</font><br>
<font size="2" face="Courier">if ((ODBC_erg == SQL_SUCCESS) || (ODBC_erg == SQL_SUCCESS_WITH_INFO))</font><br>
<font size="2" face="Courier">{</font><br>
<font size="2" face="Courier">        return 1;</font><br>
<font size="2" face="Courier">}</font><br>
<font size="2" face="Courier">else</font><br>
<font size="2" face="Courier">{</font><br>
<font size="2" face="Courier">        print_odbc_error(ODBC_Connection);</font><br>
<font size="2" face="Courier">}</font><br>
<br>
<tt><font size="2">My code for checking the connection:</font></tt><br>
<font size="2" face="Courier">void</font><font size="2" face="Courier"> print_odbc_error(SQLHDBC ODBC_Connection)</font><br>
<font size="2" face="Courier">{</font><br>
<font size="2" face="Courier"> SQLINTEGER ODBC_err = 0;</font><br>
<font size="2" face="Courier"> SQLSMALLINT ODBC_mlen = 0;</font><br>
<font size="2" face="Courier"> </font><font size="2" face="Courier">char</font><font size="2" face="Courier"> ODBC_stat[10];</font><br>
<font size="2" face="Courier"> </font><font size="2" face="Courier">char</font><font size="2" face="Courier"> ODBC_msg[200];</font><br>
<br>
<font size="2" face="Courier"> memset (ODBC_stat, 0, </font><font size="2" face="Courier">sizeof</font><font size="2" face="Courier"> (ODBC_stat));</font><br>
<font size="2" face="Courier"> memset (ODBC_msg, 0, </font><font size="2" face="Courier">sizeof</font><font size="2" face="Courier"> (ODBC_msg));</font><br>
<br>
<font size="2" face="Courier"> </font><font size="2" face="Courier">if</font><font size="2" face="Courier"> (ODBC_Connection== 0) </font><br>
<font size="2" face="Courier"> {</font><br>
<font size="2" face="Courier"> fprintf(</font><font size="2" face="Courier">"print_odbc_error failed due to ODBC Connection Handle == 0.\n"</font><font size="2" face="Courier">);</font><br>
<font size="2" face="Courier"> </font><font size="2" face="Courier">return</font><font size="2" face="Courier">;</font><br>
<font size="2" face="Courier"> }</font><br>
<br>
<font size="2" face="Courier"> SQLGetDiagRec(SQL_HANDLE_DBC, ODBC_Connection, 1, ODBC_stat, &ODBC_err, ODBC_msg, </font><font size="2" face="Courier">sizeof</font><font size="2" face="Courier">(ODBC_msg), &ODBC_mlen);</font><br>
<font size="2" face="Courier"> </font><font size="2" face="Courier">fprintf(</font><font size="2" face="Courier">"%s (%d)\n"</font><font size="2" face="Courier">, ODBC_msg, ODBC_err);</font><br>
<font size="2" face="Courier">}</font><br>
<br>
<br>
<br>
<tt><font size="2">Perhaps I'm using arguments wrong? Or the postgres ODBC driver doesnt support it?</font></tt><br>
<br>
<tt><font size="2">-Alan</font></tt></body></html>