2

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);
4

1 に答える 1

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);
    }
于 2012-10-14T01:42:29.337 に答える