2012-10-14 124 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

谢谢,马克!你可以分享你找到这个链接,以便我可以阅读更多的信息吗? –