如何使用ODBC获取整数值?

时间:2014-03-23 23:33:29

标签: c++ odbc

我试图从我的数据库中的一个表中获取一个int值。为了使用ODBC处理这个问题,我写了:

std::string strRequete = "SELECT MIN(idO) FROM dbo.Opo WHERE l = 'x' AND b = '' AND t = 'r'";
std::wstring strwRequete(strRequete.begin(), strRequete.end());
retcode = SQLExecDirect(hstmt, (SQLWCHAR*)strwRequete.c_str(), SQL_NTS);

SQLINTEGER cbTestStrId;
SQLINTEGER sziIdO;
SQLGetData(hstmt, 1, SQL_C_LONG, &sziIdO, 1, &cbTestStrId);

但是,使用这个避风港解决了我的问题。我获得了很长的价值作为回报,我无法理解其含义,而不是获得86

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

SQLGetData()函数调用中,使用SQL_C_DEFAULT而不是SQL_C_LONG作为TargetType参数(第三个)。

如果TargetTypeSQL_C_DEFAULT,则驱动程序会根据源的SQL数据类型选择默认的C数据类型,在您的情况下应为int

如果SQL数据源中的值未定义为int,则可以使用SQLINTEGER作为TargetType进行转换为int

此外,SQLGetData()中的最后一个参数应为SQLLEN类型,因此请相应地更改变量cbTestStrId。执行后测试其值,因为它可以通知您有关错误的信息,如果它与下列之一匹配:

  • The length of the data available to return
  • SQL_NO_TOTAL
  • SQL_NULL_DATA

在这种情况下,您的sziIdO不应视为有效。检查SQL是否有错误,并确保它在SQL服务器上产生有效的响应。

有关该主题的更多信息,请阅读this MSDN page