2012-10-14 126 views
2

我正在使用C++ ODBC連接到本地SQL Server。C++ ODBC檢查連接是否成功

當我試圖讓connecton到服務器;有沒有辦法驗證連接是否確實成功?

這裏是我的代碼,這代表了連接手柄樣本,使得連接:

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

回答

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); 
    } 
+0

所以以後我火'的SQLConnect()'我可以檢查是否'這個 - > sReturn == SQL_SUCCESS'? –

+1

這就是我會做的。但爲了安全起見,您可能需要處理所有可能的值,例如SUCCESS_WITH_INFO。你是否認爲「仍在執行」錯誤或只是想等待取決於你想要的。 –

+0

謝謝,馬克!你可以分享你找到這個鏈接,以便我可以閱讀更多的信息嗎? –