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中使用。因此,當需要與當前時間比較時,就不需要通過客戶端來取了。
歡迎批評指正
。