无法从SQL使用ODBC访问数据

时间:2011-04-11 06:43:12

标签: sql-server mfc odbc visual-c++

我正在使用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 );
   }
}

感谢。

1 个答案:

答案 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控件是否可用   将加载游标库。