有人可以解释这种奇怪的行为吗?
CString A, B;
CRecordset rs.Open( forwardOnly, "select A,B from table", readOnly);
// does not work:
rs.GetFieldValue( "A", A); // ok
rs.GetFieldValue( "B", B); // throws; m_nRetCode is set to -1;
//trace says "dbcore.cpp(174) : AppMsg - invalid descriptor index."
// works:
rs.GetFieldValue( (short) 0, A); // ok
rs.GetFieldValue( (short) 1, B); // ok
// does´nt work either !?
rs.GetFieldValue( rs.GetFieldIndexByName( "A"), A); // ok
rs.GetFieldValue( rs.GetFieldIndexByName( "B"), B); // asserts !?
// throws a different exception:
rs.GetFieldValue( "A", A); // ok
rs.GetFieldValue( "A", A); // throws, but m_nRetCode is 100 now and the trace is saying "data allready fetched" !?
// strange...
rs.GetFieldValue( (short) 0, A); // ok
rs.GetFieldValue( "B", B); // this works
rs.GetFieldValue( "A", A); // this asserts ???
我搜索了一个提示,说 forwardOnly 不是正确的光标,但是使用 snapshot 并没有改变。谁能解释?
有没有办法解决这个问题?
答案 0 :(得分:1)
认为我找到了答案:它似乎不在 SQLGetData()中的CRecordset范围内:
如果驱动程序不支持SQLGetData的扩展,则该函数 只能返回数字大于的未绑定列的数据 最后绑定列的值。此外,在一行数据中, 每次调用SQLGetData时Col_or_Param_Num参数的值必须 大于或等于该变量中Col_or_Param_Num的值 以前的电话;也就是说,必须在递增列中检索数据 编号顺序。
https://docs.microsoft.com/en-us/sql/odbc/reference/syntax/sqlgetdata-function?view=sql-server-2017