;
帖子
3919 
精华
积分
11710 
鱼币
0 ¥ 
来自
大连 
在线时间
1858 小时 
注册时间
2007-6-11 
最后登录
2009-10-20 

贴图大师勋章新人进步勋章宣传大使勋章论坛元老勋章

3
发表于 2009-1-5 19:48 | 只看该作者
鍦╒isual C++涓敤ADO杩涜鏁版嵁搴撶紪绋(涓) - 缂栫▼搴 - Powered by SupeSite

浣犵殑浣嶇疆锛缂栫▼搴 >> 璧勮 >> VC >> 鏁版嵁搴 >> 璇︾粏鍐呭 鍦ㄧ嚎鎶曠ǹ

鍦╒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鐨

鎵撳嵃 | 鏀惰棌姝ら〉 |  鎺ㄨ崘缁欏ソ鍙 | 涓炬姤
涓婁竴绡 涓嬩竴绡
 

璇勫垎锛0

鍙戣〃璇勮
鏌ョ湅鍏ㄩ儴鍥炲銆愬凡鏈0浣嶇綉鍙嬪彂琛ㄤ簡鐪嬫硶銆