15 мая 2023 года "Исходники.РУ" отмечают своё 23-летие!
Поздравляем всех причастных и неравнодушных с этим событием!
И огромное спасибо всем, кто был и остаётся с нами все эти годы!

Главная Форум Журнал Wiki DRKB Discuz!ML Помощь проекту


Как получить DATA SOURCE NAMES (DSN)

void GetDSN()
{
CWaitCursor Wait;
SQLHENV henv;
RETCODE RetCode;
short len1,len2;
CString strValue;
unsigned char *ucpDSN;
ucpDSN=(unsigned char*)malloc(256);
unsigned char *ucpDescription ;             // Содержит описание ODBC драйвера для DSN
ucpDescription=(unsigned char*)malloc(256);
RetCode=::SQLAllocEnv(&henv);               // выделаем дескриптор окружения

if(RetCode == SQL_SUCCESS || RetCode == SQL_SUCCESS_WITH_INFO) // Если распределение успешно
{
    while(RetCode!=SQL_NO_DATA)
    {
       // Fetch available data sources
       RetCode=::SQLDataSources(henv, SQL_FETCH_NEXT, ucpDSN, 256, 
                                &len1, ucpDescription , 256, &len2);
      if (RetCode!=SQL_NO_DATA)                // Если данные существуют
      {
          strValue.Format("%s-%s",(LPCTSTR)ucpDSN,(LPCTSTR)ucpDescription);
          if(!strValue.IsEmpty())
                 AfxMessageBox(strValue);        // Отображаем DSN Имена

         memset(ucpDSN,'\0',sizeof(ucpDSN));  // Очищаем буфер
      }
   }
}

delete ucpDescription;
delete ucpDSN;
::SQLFreeEnv(henv);                // free environment handle
henv = NULL;
}