鍦╒isual C++涓敤ADO杩涜鏁版嵁搴撶紪绋(涓)
鍙戝竷: 2008-6-26 12:17 | 浣滆: admin | 鏌ョ湅: 51娆
銆銆 1. 鐢熸垚搴旂敤绋嬪簭妗嗘灦骞跺垵濮嬪寲OLE/COM搴撶幆澧
銆銆 鍒涘缓涓涓爣鍑嗙殑MFC AppWizard(exe)搴旂敤绋嬪簭锛岀劧鍚庡湪浣跨敤ADO鏁版嵁搴撶殑InitInstance鍑芥暟涓垵濮嬪寲OLE/COM搴擄紙鍥犱负ADO搴撴槸涓涓狢OM DLL搴擄級銆
鏈緥涓猴細
銆 BOOL CAdotestDlg::OnInitDialog()
銆 {
::CoInitialize(NULL); //鍒濆鍖朞LE/COM搴撶幆澧
}
銆銆 绋嬪簭鏈鍚庤璋冪敤 ::CoUninitialize()锛//閲婃斁绋嬪簭鍗犵敤鐨凜OM 璧勬簮銆
銆銆 鍙﹀锛
m_pRecordset->Close(); 娉ㄦ剰锛侊紒锛佷笉瑕佸娆″叧闂紒锛侊紒锛侊紒锛侊紒锛侊紒锛侊紒锛
m_pConnection->Close();
m_pRecordset = NULL;
m_pConnection = NULL;
銆銆 2. 寮曞叆ADO搴撴枃浠
銆銆 浣跨敤ADO鍓嶅繀椤诲湪宸ョ▼鐨剆tdafx.h鏂囦欢鏈鍚庣敤鐩存帴寮曞叆绗﹀彿锛僫mport寮曞叆ADO搴撴枃浠讹紝浠ヤ娇缂栬瘧鍣ㄨ兘姝g‘缂栬瘧銆備唬鐮佸涓嬶細
#import "C:\Program Files\common files\system\ado\msado15.dll" no_namespace rename("EOF","adoEOF")
銆銆 ADO绫荤殑瀹氫箟鏄綔涓轰竴绉嶈祫婧愬瓨鍌ㄥ湪ADO DLL(msado15.dll锛変腑锛屽湪鍏跺唴閮ㄧО涓虹被鍨嬪簱銆傜被鍨嬪簱鎻忚堪浜嗚嚜娌绘帴鍙o紝浠ュ強C锛嬶紜浣跨敤鐨凜OM vtable鎺ュ彛銆傚綋浣跨敤锛僫mport鎸囦护鏃讹紝鍦ㄨ繍琛屾椂Visual C锛嬶紜闇瑕佷粠ADO DLL涓鍙栬繖涓被鍨嬪簱锛屽苟浠ユ鍒涘缓涓缁凜锛嬶紜澶存枃浠躲傝繖浜涘ご鏂囦欢鍏锋湁.tli 鍜.tlh鎵╁睍鍚嶏紝璇昏呭彲浠ュ湪椤圭洰鐨勭洰褰曚笅鎵惧埌杩欎袱涓枃浠躲傚湪C锛嬶紜绋嬪簭浠g爜涓皟鐢ㄧ殑ADO绫昏鍦ㄨ繖浜涙枃浠朵腑瀹氫箟銆
銆銆 绋嬪簭鐨勭涓夎鎸囩ずADO瀵硅薄涓嶄娇鐢ㄥ悕绉扮┖闂淬傚湪鏈変簺搴旂敤绋嬪簭涓紝鐢变簬搴旂敤绋嬪簭涓殑瀵硅薄涓嶢DO涓殑瀵硅薄涔嬮棿鍙兘浼氬嚭鐜板懡鍚嶅啿绐侊紝鎵浠ユ湁蹇呰浣跨敤鍚嶇О绌洪棿銆傚鏋滆浣跨敤鍚嶇О绌洪棿锛屽垯鍙妸绗笁琛岀▼搴忎慨鏀逛负锛 rename_namespace("AdoNS")銆傜鍥涜浠g爜灏咥DO涓殑EOF(鏂囦欢缁撴潫)鏇村悕涓篴doEOF锛屼互閬垮厤涓庡畾涔変簡鑷繁鐨凟OF鐨勫叾浠栧簱鍐茬獊銆
銆銆 3锛庡埄鐢ㄦ櫤鑳芥寚閽堣繘琛屾暟鎹簱鎿嶄綔
銆銆 鍦–aboutDlg澶存枃浠朵腑瀹氫箟涓や釜ADO鏅鸿兘鎸囬拡绫诲疄渚,骞跺湪瀵硅瘽妗嗕腑鍔犲叆涓涓狶istCtrl銆
class CAdotestDlg : public CDialog
{
_ConnectionPtr m_pConnection;
_RecordsetPtr m_pRecordset;
銆銆 ClistCtrl m_List;
......
}
銆銆 ADO搴撳寘鍚笁涓櫤鑳芥寚閽:_ConnectionPtr銆乢CommandPtr鍜宊RecordsetPtr銆
銆銆 _ConnectionPtr閫氬父琚敤鏉ュ垱寤轰竴涓暟鎹繛鎺ユ垨鎵ц涓鏉′笉杩斿洖浠讳綍缁撴灉鐨凷QL璇彞锛屽涓涓瓨鍌ㄨ繃绋嬨
銆銆 _CommandPtr杩斿洖涓涓褰曢泦銆傚畠鎻愪緵浜嗕竴绉嶇畝鍗曠殑鏂规硶鏉ユ墽琛岃繑鍥炶褰曢泦鐨勫瓨鍌ㄨ繃绋嬪拰SQL璇彞銆傚湪浣跨敤_CommandPtr鎺ュ彛鏃讹紝鍙互鍒╃敤鍏ㄥ眬_ConnectionPtr鎺ュ彛锛屼篃鍙互鍦╛CommandPtr鎺ュ彛閲岀洿鎺ヤ娇鐢ㄨ繛鎺ヤ覆銆傘銆_RecordsetPtr鏄竴涓褰曢泦瀵硅薄銆備笌浠ヤ笂涓ょ瀵硅薄鐩告瘮锛屽畠瀵硅褰曢泦鎻愪緵浜嗘洿澶氱殑鎺у埗鍔熻兘锛屽璁板綍閿佸畾銆佹父鏍囨帶鍒剁瓑銆
銆銆 鍦ㄤ娇鐢ˋDO绋嬪簭鐨勪簨浠跺搷搴斾腑OnButton1鍔犲叆浠ヤ笅浠g爜:
void CAdotestDlg::OnButton1()
{
m_List.ResetContent();
m_pConnection.CreateInstance(_uuidof(Connection)); //鍒濆鍖朇onnection鎸囬拡
m_pRecordset.CreateInstance(_uuidof(Recordset));//鍒濆鍖朢ecordset鎸囬拡
try
{
m_pConnection->Open("DSN=ADOTest","","",0); //杩炴帴鍙綔ADOTest鐨凮DBC鏁版嵁婧
//娉ㄦ剰锛氳繖鏄繛鎺ヤ笉闇瑕佺敤鎴稩D鎴栧瘑鐮佺殑open 鍑芥暟
// 鍚﹀垯褰㈠紡涓 ->Open("DSN=test;uid=sa;pwd=123;","","",0);
// 鎵цSQL璇彞寰楀埌涓涓褰曢泦鎶婂叾鎸囬拡璧嬪肩粰m_pRecordset
CString strSql="select * from middle";
BSTR bstrSQL = strSql.AllocSysString();
m_pRecordset->Open(bstrSQL,(IDispatch*)m_pConnection,adOpenDynamic,adLockOptimistic,adCmdText);
//adOpenDynamic锛氬姩鎬 adLockOptimistic涔愯灏侀攣娉 adCmdText锛氭枃鏈煡璇㈣鍙
while(!m_pRecordset->adoEOF)//閬嶅巻鎵鏈夎褰
{
//鍙栫邯褰曞瓧娈靛兼柟寮忎箣涓
_variant_t TheValue; //VARIANT鏁版嵁绫诲瀷
TheValue = m_pRecordset->GetCollect("BIG_NAME");//寰楀埌瀛楁BIG_NAME鐨勫
if(TheValue.vt!=VT_NULL)
m_List.AddString((char*)_bstr_t(TheValue));
//灏嗚鍊煎姞鍏ュ埌鍒楄〃鎺т欢涓
//鍙栫邯褰曞瓧娈靛兼柟寮忎箣浜
// _bstr_t TheValue1=m_pRecordset->Fields->GetItem("BIG_NAME")->Value;
// CString temp=TheValue1.copy();
// m_List.AddString(temp);
//鏁版嵁绫诲瀷杞崲
_variant_t vUsername,vBirthday,vID,vOld;
TRACE("id:%d,濮撳悕:%s,骞撮緞:%d,鐢熸棩:%s\r\n",
vID.lVal,(LPCTSTR)(_bstr_t)vUsername,vOld.lVal,(LPCTSTR)(_bstr_t)vBirthday);
m_pRecordset->MoveNext();//杞埌涓嬩竴鏉$邯褰
}
m_pRecordset->Close();
m_pConnection->Close();
}
catch (_com_error e)//寮傚父澶勭悊
{
AfxMessageBox(e.ErrorMessage());
}
m_pRecordset->Close(); //娉ㄦ剰锛侊紒锛佷笉瑕佸娆″叧闂紒锛侊紒锛佸惁鍒欎細鍑洪敊
m_pConnection->Close();
m_pRecordset = NULL;
m_pConnection = NULL;
}
銆銆 绋嬪簭涓氳繃_variant_t鍜宊bstr_t杞崲COM瀵硅薄鍜孋锛嬶紜绫诲瀷鐨勬暟鎹, _variant_t绫诲皝瑁呬簡OLE鑷不VARIANT鏁版嵁绫诲瀷銆傚湪C++涓娇鐢╛variant_t绫昏姣旂洿鎺ヤ娇鐢╒ARIANT鏁版嵁绫诲瀷瀹规槗寰楀銆
銆銆 濂斤紝缂栬瘧鍚庤绋嬪簭灏辫兘杩愯浜嗭紝浣嗚浣忚繍琛屽墠瑕佸垱寤轰竴涓彨ADOTest鐨




发表于 2009-1-5 19:48
| 











