C++ ODBC Проверка успешного подключения

Я использую C++ ODBC для подключения к локальному серверу SQL.

Однажды я попытался подключиться к серверу; Есть ли способ проверить, что соединение действительно было успешным?

Вот пример моего кода, который делегирует дескрипторы соединения и устанавливает соединение:

//Allocate the pre-connection handles
  this->sReturn = SQL_SUCCESS;
  this->sReturn = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &this->eHandle);
  this->sReturn = SQLSetEnvAttr(this->eHandle, SQL_ATTR_ODBC_VERSION, reinterpret_cast<void*>(SQL_OV_ODBC3_80), 4);
  SQLAllocHandle(SQL_HANDLE_DBC, this->eHandle, &this->cHandle);

//Connect to the database
  this->sReturn = SQLConnect(this->cHandle, reinterpret_cast<SQLWCHAR*>(serverName), SQL_NTS, NULL, 0, NULL, 0);

1 ответ

Решение

Согласно MSDN, возвращаемые значения SQLConnect():

SQL_SUCCESS, SQL_SUCCESS_WITH_INFO, SQL_ERROR, SQL_INVALID_HANDLE или SQL_STILL_EXECUTING.

Поэтому я предполагаю, что SQL_SUCCESS или SQL_SUCCESS_WITH_INFO указывают, что соединение действительно было успешным.

Если под "проверять" вы имеете в виду нечто иное, чем просто просмотр кода возврата, я мог бы представить, что любой последующий вызов, использующий соединение, завершится неудачей, если по какой-то причине соединение будет недействительным.

Вот пример кода с того же сайта MSDN - обратите внимание, что они проверяют на успех ИЛИ на успех с информацией:

    // Connect to data source
    retcode = SQLConnect(hdbc, (SQLCHAR*) "NorthWind", SQL_NTS, (SQLCHAR*) NULL, 0, NULL, 0);

    // Allocate statement handle
    if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO) {
        retcode = SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt); 

       // Process data
       if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO) {
          SQLFreeHandle(SQL_HANDLE_STMT, hstmt);
       }

       SQLDisconnect(hdbc);
    }
Другие вопросы по тегам