我正在使用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 );
}
}
感谢。
答案 0 :(得分:0)
这是一个猜测:问题可能出在DEFAULT_FIELD_TYPE
。使用普通CRecordset
,ODBC API可能无法确定字段的类型。您可以尝试省略该参数,看看是否获得了所有字段的char数组表示,或者使用SQL_C_CHAR
而不是DEFAULT_FIELD_TYPE
,因为所有字段都是字符串类型。
你也在while循环结束时错过了对rs.MoveNext的调用。
另一种可能性是使用游标库:请参阅GetFieldValue MSDN页面上的此注释:
注意:如果声明记录集对象 没有从CRecordset派生,做 没有ODBC游标库 加载。游标库需要 记录集至少有一个 约束柱;但是,当你使用 CRecordset直接,没有 列被绑定。会员 函数CDatabase :: OpenEx和 CDatabase :: Open控件是否可用 将加载游标库。