我使用MFC从使用ODBC的SQL数据源检索数据。
我在获取数据字段以外的"id"字段在表中的问题。
在后续的迭代中,发现varValue对于除"id"以外的字段为空。
请指导我访问表中的所有数据字段
Table data:
**id**(nchar) name(varchar) age(varchar)
0 **11** john 24
1 **22** troy 25
2 **33** bill 21
only ids are fetched.
CDatabase db;
db.OpenEx( NULL, CDatabase::forceOdbcDialog );
CRecordset rs( &db );
rs.Open( CRecordset::forwardOnly,
_T( "SELECT * FROM REPDB.dbo.fellas" ) );
CDBVariant varValue;
short nFields = rs.GetODBCFieldCount( );
while( !rs.IsEOF( ) )
{
for( short index = 0; index < nFields; index++ )
{
rs.GetFieldValue( index, varValue,DEFAULT_FIELD_TYPE );
}
}
谢谢。
这是一个猜测:问题可能是与DEFAULT_FIELD_TYPE
。使用普通的CRecordset
, ODBC API可能无法确定字段的类型。您可以尝试省略该参数,看看是否获得了所有字段的字符数组表示,或者使用SQL_C_CHAR
而不是DEFAULT_FIELD_TYPE
,因为您的所有字段都是字符串类型。
您还错过了在while循环结束时对rs.MoveNext的调用。
另一种可能是使用游标库:参见GetFieldValue MSDN页面上的注释:
注意:如果你声明一个记录集对象不从CRecordset派生,做没有ODBC游标库加载。游标库要求记录集至少有一个绑定列;然而,当你使用CRecordset,没有列是绑定的。会员函数CDatabase::OpenEx和CDatabase::是否打开控件光标库将被加载。