VC+ADO操作数据库注意事项(1)
用ADO在VC下进行数据库客户端开发,稍有不甚就会出现致命错误,错误提示又匪夷所思,因此需要小心翼翼。最近做的个项目时,我是深深的体会到这一点。针对出现的问题,我总结了以下几点。
说明:1、用VC开发数据库系统真是痛苦!
2、以下的操作都是针对Access数据库。
1、_RecordsetPtr::Open与_RecordsetPtr::Close要对应使用
一个RescordSet被Open后,一定要Close掉。并且不能被连续Open,即不能嵌套使用。这种错误,往往发生在函数之间的调用。两个函数使用同一个_RecordsetPtr,但其中的一个函数中未Close就调用另一个函数,灾难就此发生。
2、_RecordsetPtr与_CommandPtr
两者都可以完成记录的查询、更新、插入操作。但在使用中,我感觉用_RecordsetPtr完成查询功能,用_CommandPtr完成插入和更新操作比较方便
3、对日期操作
日期操作感觉很麻烦,不仅仅是因为日期由多种格式(短日期、长日期……)。VC中有的时间类型有COleDateTime和CTime,使用COleDateTime便于与ADO交换数据。
1)日期的插入、更新
把日期Format字符串就可以了。注意用'%s'。如:
CString szSQL;
szSQL.Format("insert into T_TABLE(NAME, BIRTHDAY \
values('%s', '%s')",
szName, //CString szName;
dtBirth.Format()); //COleDateTime dtBirth;
2)日期的比较
COleDateTime的格式要与数据库中的日期格式一致。否则定出问题。如对短日期类型:
注意用#%s#
CString szSQL;
szSQL.Format("select * from T_GUEST where GUEST_JOINTIME>=#%s# and GUEST_JOINTIME<=#%s#",
m_dtJoinStart.Format(VAR_DATEVALUEONLY),
m_dtJoinEnd.Format(VAR_DATEVALUEONLY));
3)Now()函数
Access中有个Now()函数,用来直接获取当前系统的时间,并且可以在SQL中使用。因此,当需要与当前时间比较时,就不需要通过客户端来取了。
欢迎批评指正。