使用c ++查找odbc错误状态

时间:2015-09-23 10:46:53

标签: c++ odbc

我想在c ++中使用ODBC。这行代码返回-2 Query.SetResultTransformer(Transformers.DistinctRootEntity); IList<PurchaseBillDetails> list = Query.List<PurchaseBillDetails>(); 。我认为这是一个错误代码,但我不知道哪个错误?

(rc=-2)

我已经编写了这段代码来提取状态,但它什么也没有返回:

rc=SQLBindParameter(hstmt,1,SQL_PARAM_INPUT,SQL_C_DEFAULT, SQL_SS_TABLE,10,0,TVPTableName,SQL_NTS,&cbTVPTableNAme);

有人知道这段代码是什么意思吗?

这是我的完整代码:

void extract_error(
      char *fn,
      SQLHANDLE handle,
      SQLSMALLINT type)
  {
    SQLINTEGER i = 0;
    SQLINTEGER native;
    SQLWCHAR state[ 7 ];
    SQLWCHAR text[256];
    SQLSMALLINT len;
    SQLRETURN ret;
    fprintf(stderr,
            "\n"
            "The driver reported the following diagnostics whilst running "
            "%s\n\n",
            fn);

    do
    {
      ret = SQLGetDiagRec(type, handle, ++i, state, &native, text,
      sizeof(text), &len );
      if (SQL_SUCCEEDED(ret))
      printf("%s:%ld:%ld:%s\n", state, i, native, text);
    }
    while( ret == SQL_SUCCESS );
  }

1 个答案:

答案 0 :(得分:0)

-2的返回码定义为a.obj : error LNK2005: "char const * const FILENAME" (?FILENAME@@3PBDB) already defined in b.obj。驱动程序可能无法获取无效句柄的任何错误信息。

此外,从您的代码中,您永远不会创建有效的句柄,您使用SQL_INVALID_HANDLE句柄调用SQLBindParameter函数 - 这不起作用。

您必须先调用SQL_NULL_HSTMT来分配有效的语句句柄(需要有效的连接句柄,并分配一次需要有效环境句柄的句柄)。有关更多信息,请参见此处:

https://msdn.microsoft.com/en-us/library/ms712455%28v=vs.85%29.aspx

除此之外,我认为你提取错误的功能应该有效。只需传递一个有效的句柄。