我想在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 );
}
答案 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
除此之外,我认为你提取错误的功能应该有效。只需传递一个有效的句柄。