CRecordset :: GetFieldValue()引发异常(但并非总是如此)

时间:2018-10-30 07:50:33

标签: database mfc

有人可以解释这种奇怪的行为吗?

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 并没有改变。谁能解释?

有没有办法解决这个问题?

1 个答案:

答案 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