C ++ ODBC检查连接是否成功

时间:2012-10-14 01:34:39

标签: c++ sql-server database odbc database-connection

我正在使用C ++ ODBC连接到本地SQL Server。

一旦我尝试连接到服务器;有没有办法验证连接确实成功?

以下是我的代码示例,它代表连接句柄并建立连接:

//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 个答案:

答案 0 :(得分:2)

根据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);
    }