我很奇怪你为什么要使用GetFieldValue()这个函数?
CRecordSet在使用ClassWaizzad后会自动生成数据库字段的相应的成员变量如m_101.
SQL_SERVER在用CRecordSet打开ODBC时,dynaset(动态集)是没有用的,应用snapshot(快照)。使用CRecordSet时,继承类中有一个函数GetDefaultSQL()为你绑定了表名,所以你的打开数据库函数可以写为 Rs.open()即可。如有条件查询,最好在open()之前使用m_strFilter变量。另外,Visaul Devlop Studio 6.0 中的VC关于数据库编程时,其Dedug版的DLL是不稳定的,应直接使用Release版.我曾用VC编过数据库应用,吃了不少苦头。我认为VC不适合以编数据库应用。不然单数据库游标的控制就要写大量的代码。且CRecordSet使用ODBC时效率低下,不信你试一下Open()一个10万条记录的表时要花多长时间,花多少资源。SQL_Server7.0用ODBC编程也是不合适的,应用OLDDB这个接口。

解决方案 »

  1.   

    错,用ODBC来连接SQLSERVER是性能最好的。如果你是用ClassWizard派生的类,在打开数据库后,不用再使用GetFieldValue()函数来取值了,可以直接使用Rs.m_101,这个值就是该字段中中记录的值,可以用MoveNext()来获取下条记录的值。如果直接使用CRecordset,这才需要使用GetFieldValue来读取数据值。你可以这样,
    声明一个变量CString str;
    Rs.GetFieldValue("101",str);这样值就包括在str中了,然后再转换为你需要的类型就可以了。如果还有问题,可以参考开发中心里面的有关数据库编程的文章。
      

  2.   

    之所以用GetFieldValue是因为当某一字段为NULL时,用Rs.m_L01会出错。
      

  3.   

    但直接使用CRecordset会产生没有绑定列的错误!
      

  4.   

    为什么不用CRecordset的IsFieldNull方法判断某个字段是否为NULL呢?