VC+ADO操作數(shù)據(jù)庫(kù)注意事項(xiàng)(1)
用ADO在VC下進(jìn)行數(shù)據(jù)庫(kù)客戶端開(kāi)發(fā),稍有不甚就會(huì)出現(xiàn)致命錯(cuò)誤,錯(cuò)誤提示又匪夷所思,因此需要小心翼翼。最近做的個(gè)項(xiàng)目時(shí),我是深深的體會(huì)到這一點(diǎn)。針對(duì)出現(xiàn)的問(wèn)題,我總結(jié)了以下幾點(diǎn)。
說(shuō)明:1、用VC開(kāi)發(fā)數(shù)據(jù)庫(kù)系統(tǒng)真是痛苦!
2、以下的操作都是針對(duì)Access數(shù)據(jù)庫(kù)。
1、_RecordsetPtr::Open與_RecordsetPtr::Close要對(duì)應(yīng)使用
一個(gè)RescordSet被Open后,一定要Close掉。并且不能被連續(xù)Open,即不能嵌套使用。這種錯(cuò)誤,往往發(fā)生在函數(shù)之間的調(diào)用。兩個(gè)函數(shù)使用同一個(gè)_RecordsetPtr,但其中的一個(gè)函數(shù)中未Close就調(diào)用另一個(gè)函數(shù),災(zāi)難就此發(fā)生。
2、_RecordsetPtr與_CommandPtr
兩者都可以完成記錄的查詢、更新、插入操作。但在使用中,我感覺(jué)用_RecordsetPtr完成查詢功能,用_CommandPtr完成插入和更新操作比較方便
3、對(duì)日期操作
日期操作感覺(jué)很麻煩,不僅僅是因?yàn)槿掌谟啥喾N格式(短日期、長(zhǎng)日期……)。VC中有的時(shí)間類型有COleDateTime和CTime,使用COleDateTime便于與ADO交換數(shù)據(jù)。
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的格式要與數(shù)據(jù)庫(kù)中的日期格式一致。否則定出問(wèn)題。如對(duì)短日期類型:
注意用#%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()函數(shù)
Access中有個(gè)Now()函數(shù),用來(lái)直接獲取當(dāng)前系統(tǒng)的時(shí)間,并且可以在SQL中使用。因此,當(dāng)需要與當(dāng)前時(shí)間比較時(shí),就不需要通過(guò)客戶端來(lái)取了。
歡迎批評(píng)指正
。