使用ODBC访问数据时遇到问题
问题描述:
我正在使用MFC从SQL数据源使用ODBC检索数据。
我有问题获取表中的“id”字段以外的数据字段。
在后续迭代中,varValue被发现为“id”以外的字段为空。使用ODBC访问数据时遇到问题
请指引我在访问所有数据字段的表
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 :: Open控制是否将加载 游标库。