SQLRETURN   rev,ret,reterr;
CString tmpsv;
SQLCHAR*    ServerName=NULL;//数据源名称
SQLCHAR*    Discription=NULL;
SQLSMALLINT* NameLength1Ptr=NULL;
SQLSMALLINT* NameLength2Ptr=NULL;
SQLHENV   henv;
        SQLCHAR *Sqlstate = NULL;
        SQLINTEGER *NativeErrorPtr = NULL;
        SQLCHAR *MessageText = NULL;
SQLSMALLINT *TextLengthPtr = NULL;
rev = SQLAllocHandle( SQL_HANDLE_ENV, SQL_NULL_HANDLE, &henv );//分配环境句柄

if (rev==SQL_SUCCESS_WITH_INFO || rev==SQL_SUCCESS  )
{
    AfxMessageBox("分配环境成功!");
            ret = SQLDataSources(henv,SQL_FETCH_FIRST,     ServerName,30,NameLength1Ptr,Discription,30,NameLength2Ptr);//取数据源列表
    MessageBox(CONCAT("thank you", CONCAT(' ', "MessageBox"))) ;

    if ( ret == SQL_ERROR )//测试取数据源是否成功?
            //SQL_SUCCESS_WITH_INFO || ret==SQL_SUCCESS  || ret==SQL_INVALID_HANDLE
        {
           tmpsv.Format("%d",ret);
   AfxMessageBox(tmpsv);
   ret = SQLDataSources(henv,SQL_FETCH_NEXT,         ServerName,30,NameLength1Ptr,Discription,30,NameLength2Ptr);
                   while (ret!=SQL_NO_DATA)//循环显示数据源名称
      {
 tmpsv.Format("%s",ServerName);
         AfxMessageBox(tmpsv);
      }
                   reterr = SQLGetDiagRec(SQL_HANDLE_DBC,henv,ret,Sqlstate,NativeErrorPtr,    MessageText,10,TextLengthPtr);//诊断信息
   if (reterr==SQL_SUCCESS_WITH_INFO || reterr==SQL_SUCCESS  )
      {
 tmpsv.Format("%s",MessageText);
         AfxMessageBox(tmpsv);
      }
                }
           SQLFreeHandle(SQL_HANDLE_ENV,henv);//释放环境句柄
        } 
这一段程序还未完全,有兴趣请告知你的E_Mail,我再给你发过