使用 ODBC 从 SQL 访问数据时遇到问题
我正在使用 MFC 使用 ODBC 从 SQL 数据源检索数据。
我在获取表中“id”字段以外的数据字段时遇到问题。
在随后的迭代中,发现除“id”之外的字段的 varValue 为空。
请指导我访问表中的所有数据字段,
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 );
}
}
谢谢。
I am using MFC to retrieve data from a SQL data source using ODBC.
I am having problem in getting data fields other than the "id" field in the table.
The varValue is found to be null for the fields other than "id", in sunsequent iterations.
Please guide me in accessing all the data fields in the table
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 );
}
}
Thanks.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
这是猜测:问题可能出在
DEFAULT_FIELD_TYPE
上。使用普通的 CRecordset,ODBC API 可能无法确定字段的类型。您可以尝试省略该参数并查看是否获得所有字段的字符数组表示形式,或者使用SQL_C_CHAR
而不是DEFAULT_FIELD_TYPE
,因为所有字段都是字符串类型。您还缺少在 while 循环末尾对 rs.MoveNext 的调用。
另一种可能性是使用游标库:请参阅 GetFieldValue MSDN 页面上的此注释:
This is a guess: the issue may be with
DEFAULT_FIELD_TYPE
. Using a plainCRecordset
, the ODBC API may not be able to determine the type of the field. You can try omitting that parameter and see if you get char array representations of all of the fields, or useSQL_C_CHAR
instead ofDEFAULT_FIELD_TYPE
, since all of your fields are string types.You are also missing a call to rs.MoveNext at the end of the while loop.
Another possibility is the use of the cursor library: see this note on the GetFieldValue MSDN page: