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

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

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

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

这是我的代码示例,它委托(delegate)连接句柄并建立连接:

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

最佳答案

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

关于C++ ODBC 检查连接是否成功,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12878578/

相关文章:

c++ - 使用 c、c++ 的 do-while 循环检查输入

c++ - 命名空间中的 gcc 编译时错误排序 vector

c++ - 为什么OpenGL会切断多边形(即使禁用此设置)?

c# - 使用 dapper.net 进行批量插入的最佳方式

mysql - 比较一个表中不包含特定字符串的列

c++ - 当我将一个字符串放入节点->名称时,为什么会出现段错误(核心已转储)?

javascript - 单击 View 以增加表中数据库中的列

c# - ASP.NET MVC - 应用程序预热 - 使用两种方法中的哪一种?

php - 从数据库中检索特定用户的内容

sql - postgres 中 SQL 以外的语言