锘??xml version="1.0" encoding="utf-8" standalone="yes"?>欧美一区二区三区四区在线观看地址
,亚洲专区欧美专区,蜜臀久久99精品久久久久久9 http://m.shnenglu.com/ivenher/articles/16638.html鐖遍キ鐩?/dc:creator>鐖遍キ鐩?/author>Wed, 20 Dec 2006 03:24:00 GMT http://m.shnenglu.com/ivenher/articles/16638.html http://m.shnenglu.com/ivenher/comments/16638.html http://m.shnenglu.com/ivenher/articles/16638.html#Feedback 0 http://m.shnenglu.com/ivenher/comments/commentRss/16638.html http://m.shnenglu.com/ivenher/services/trackbacks/16638.html 鍘熸柟娉曞涓嬶細case 聽VT_DECIMAL:聽 聽聽聽聽聽聽聽聽聽聽聽聽聽{ 聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 double 聽val聽 = 聽var.decVal.Lo32; 聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽val聽 *= 聽(var.decVal.sign聽 == 聽 128 ) ? 聽 - 1 聽:聽 1 ; 聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽val聽 /= 聽pow( 10 ,聽var.decVal.scale);聽 聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽CString聽strFormat; 聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽strFormat.Format( " %d " ,聽var.decVal.scale); 聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽strFormat聽 = 聽 " %. " + strFormat + " f " ; 聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽strValue.Format(strFormat,聽val); 聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 break ; 聽聽聽聽聽聽聽聽聽聽聽聽聽}
杞繃澶氭娌″嚭浠涔堜簨灝辮涓鴻繖孌典唬鐮佸彲浠ョ敤銆傜粨鏋滈棶棰樺氨鍑哄湪榪欐浠g爜銆?br />/**/ /// 闂鎵鍦?/span> double 聽val聽 = 聽var.decVal.Lo32; // 搴旀敼涓郝?/span>聽 double 聽val = var.decVal.Lo64; 褰撴暟鎹緝澶ф椂鏁版嵁琚埅鏂紝鐏靛紓浜嬩歡灝卞嚭鐜頒簡銆? ]]> 璋冪敤瀛樺偍榪囩▼ http://m.shnenglu.com/ivenher/articles/9655.html鐖遍キ鐩?/dc:creator>鐖遍キ鐩?/author>Mon, 10 Jul 2006 11:34:00 GMT http://m.shnenglu.com/ivenher/articles/9655.html http://m.shnenglu.com/ivenher/comments/9655.html http://m.shnenglu.com/ivenher/articles/9655.html#Feedback 1 http://m.shnenglu.com/ivenher/comments/commentRss/9655.html http://m.shnenglu.com/ivenher/services/trackbacks/9655.html 聽聽ptrCmd->CommandType = adCmdStoredProc; 聽聽ptrCmd->Execute(NULL,NULL,adCmdStoredProc); ]]> Visual C++ ADO鏁版嵁搴撶紪紼嬪叆闂紙涓嬶級 http://m.shnenglu.com/ivenher/articles/2294.html鐖遍キ鐩?/dc:creator>鐖遍キ鐩?/author>Fri, 30 Dec 2005 10:32:00 GMT http://m.shnenglu.com/ivenher/articles/2294.html http://m.shnenglu.com/ivenher/comments/2294.html http://m.shnenglu.com/ivenher/articles/2294.html#Feedback 0 http://m.shnenglu.com/ivenher/comments/commentRss/2294.html http://m.shnenglu.com/ivenher/services/trackbacks/2294.html 10銆侀偊瀹氭暟鎹?BR> 銆銆瀹氫箟涓涓粦瀹氱被錛屽皢鍏舵垚鍛樺彉閲忕粦瀹氬埌涓涓寚瀹氱殑璁板綍闆嗭紝浠ユ柟渚夸簬璁塊棶璁板綍闆嗙殑瀛楁鍊箋?BR> 銆銆(1). 浠嶤ADORecordBinding媧劇敓鍑轟竴涓被錛?BR>
class CCustomRs : public CADORecordBinding { BEGIN_ADO_BINDING(CCustomRs) ADO_VARIABLE_LENGTH_ENTRY2(3, adVarChar, m_szau_fname, sizeof(m_szau_fname), lau_fnameStatus, false) ADO_VARIABLE_LENGTH_ENTRY2(2, adVarChar, m_szau_lname, sizeof(m_szau_lname), lau_lnameStatus, false) ADO_VARIABLE_LENGTH_ENTRY2(4, adVarChar, m_szphone, sizeof(m_szphone), lphoneStatus, true) END_ADO_BINDING() public: CHAR m_szau_fname[22]; ULONG lau_fnameStatus; CHAR m_szau_lname[42]; ULONG lau_lnameStatus; CHAR m_szphone[14]; ULONG lphoneStatus; };
銆銆鍏朵腑灝嗚緇戝畾鐨勫瓧孌典笌鍙橀噺鍚嶇敤BEGIN_ADO_BINDING瀹忓叧鑱旇搗鏉ャ傛瘡涓瓧孌靛搴斾簬涓や釜鍙橀噺錛屼竴涓瓨鏀懼瓧孌電殑鍊鹼紝鍙︿竴涓瓨鏀懼瓧孌電殑鐘舵併傚瓧孌電敤浠?寮濮嬬殑搴忓彿琛ㄧず錛屽1錛?錛?絳夌瓑銆?BR> 銆銆鐗瑰埆瑕佹敞鎰忕殑鏄細濡傛灉瑕佺粦瀹氱殑瀛楁鏄瓧絎︿覆綾誨瀷錛屽垯瀵瑰簲鐨勫瓧絎︽暟緇勭殑鍏冪礌涓暟涓瀹氳姣斿瓧孌甸暱搴﹀ぇ2錛堟瘮濡俶_szau_fname[22]錛屽叾緇戝畾鐨勫瓧孌礱u_fname鐨勯暱搴﹀疄闄呮槸20錛夛紝涓嶈繖鏍風粦瀹氬氨浼氬け璐ャ傛垜鍒嗘瀽澶氬嚭鐨?鍙兘鏄負浜嗗瓨鏀懼瓧絎︿覆緇撳熬鐨勭┖瀛楃null鍜孊STR瀛楃涓插紑澶寸殑涓涓瓧錛堣〃紺築STR鐨勯暱搴︼級銆傝繖涓棶棰樺浜庡垵瀛﹁呮潵璇村彲鑳芥槸涓涓剰鎯充笉鍒扮殑闂銆?BR> 銆銆CADORecordBinding綾葷殑瀹氫箟鍦╥crsint.h鏂囦歡閲岋紝鍐呭鏄細
class CADORecordBinding { public: STDMETHOD_(const ADO_BINDING_ENTRY*, GetADOBindingEntries) (VOID) PURE; }; BEGIN_ADO_BINDING瀹忕殑瀹氫箟涔熷湪icrsint.h鏂囦歡閲岋紝鍐呭鏄細 #define BEGIN_ADO_BINDING(cls) public: \ typedef cls ADORowClass; \ const ADO_BINDING_ENTRY* STDMETHODCALLTYPE GetADOBindingEntries() { \ static const ADO_BINDING_ENTRY rgADOBindingEntries[] = { ADO_VARIABLE_LENGTH_ENTRY2瀹忕殑瀹氫箟涔熷湪icrsint.h鏂囦歡閲岋細 #define ADO_VARIABLE_LENGTH_ENTRY2(Ordinal, DataType, Buffer, Size, Status, Modify)\ {Ordinal, \ DataType, \ 0, \ 0, \ Size, \ offsetof(ADORowClass, Buffer), \ offsetof(ADORowClass, Status), \ 0, \ classoffset(CADORecordBinding, ADORowClass), \ Modify}, #define END_ADO_BINDING瀹忕殑瀹氫箟涔熷湪icrsint.h鏂囦歡閲岋細 #define END_ADO_BINDING() {0, adEmpty, 0, 0, 0, 0, 0, 0, 0, FALSE}};\ return rgADOBindingEntries;}
銆銆銆(2). 緇戝畾
_RecordsetPtr Rs1; IADORecordBinding *picRs=NULL; CCustomRs rs; ...... Rs1->QueryInterface(__uuidof(IADORecordBinding), (LPVOID*)&picRs)); picRs->BindToRecordset(&rs);
銆銆媧劇敓鍑虹殑綾誨繀欏婚氳繃IADORecordBinding鎺ュ彛鎵嶈兘緇戝畾錛岃皟鐢ㄥ畠鐨凚indToRecordset鏂規硶灝辮浜嗐?BR> 銆銆(3). rs涓殑鍙橀噺鍗蟲槸褰撳墠璁板綍瀛楁鐨勫?BR>
//Set sort and filter condition: // Step 4: Manipulate the data Rs1->Fields->GetItem("au_lname")->Properties->GetItem("Optimize")->Value = true; Rs1->Sort = "au_lname ASC"; Rs1->Filter = "phone LIKE '415 5*'"; Rs1->MoveFirst(); while (VARIANT_FALSE == Rs1->EndOfFile) { printf("Name: %s\t %s\tPhone: %s\n", (rs.lau_fnameStatus == adFldOK ? rs.m_szau_fname : ""), (rs.lau_lnameStatus == adFldOK ? rs.m_szau_lname : ""), (rs.lphoneStatus == adFldOK ? rs.m_szphone : "")); if (rs.lphoneStatus == adFldOK) strcpy(rs.m_szphone, "777"); TESTHR(picRs->Update(&rs)); // Add change to the batch Rs1->MoveNext(); } Rs1->Filter = (long) adFilterNone; ...... if (picRs) picRs->Release(); Rs1->Close(); pConn->Close();
銆銆鍙瀛楁鐨勭姸鎬佹槸adFldOK錛屽氨鍙互璁塊棶銆傚鏋滀慨鏀逛簡瀛楁錛屼笉瑕佸繕浜嗗厛璋冪敤picRs鐨刄pdate錛堟敞鎰忎笉鏄疪ecordset鐨刄pdate錛夛紝鐒跺悗鎵嶅叧闂紝涔熶笉瑕佸繕浜嗛噴鏀緋icRs錛堝嵆picRs->Release();錛夈?BR> 銆銆(4). 姝ゆ椂榪樺彲浠ョ敤IADORecordBinding鎺ュ彛娣誨姞鏂扮邯褰?BR>
if(FAILED(picRs->AddNew(&rs))) ......
銆銆11. 璁塊棶闀挎暟鎹?BR> 銆銆鍦∕icrosoft SQL涓殑闀挎暟鎹寘鎷瑃ext銆乮mage絳夎繖鏍烽暱綾誨瀷鐨勬暟鎹紝浣滀負浜岃繘鍒跺瓧鑺傛潵瀵瑰緟銆?BR> 銆銆鍙互鐢‵ield瀵硅薄鐨凣etChunk鍜孉ppendChunk鏂規硶鏉ヨ闂傛瘡嬈″彲浠ヨ鍑烘垨鍐欏叆鍏ㄩ儴鏁版嵁鐨勪竴閮ㄥ垎錛屽畠浼氳浣忎笂嬈¤闂殑浣嶇疆銆備絾鏄鏋滀腑闂磋闂簡鍒殑瀛楁鍚庯紝灝卞張寰椾粠澶存潵浜嗐?BR> 銆銆璇風湅涓嬮潰鐨勪緥瀛愶細
//鍐欏叆涓寮犵収鐗囧埌鏁版嵁搴擄細 VARIANT varChunk; SAFEARRAY *psa; SAFEARRAYBOUND rgsabound[1]; //VT_ARRAY 鈹?VT_UI1 CFile f("h:\\aaa.jpg",Cfile::modeRead); BYTE bVal[ChunkSize+1]; UINT uIsRead=0; //Create a safe array to store the array of BYTES while(1) { uIsRead=f.Read(bVal,ChunkSize); if(uIsRead==0)break; rgsabound[0].cElements =uIsRead; rgsabound[0].lLbound = 0; psa = SafeArrayCreate(VT_UI1,1,rgsabound); for(long index=0;index<uIsRead;index++) { if(FAILED(SafeArrayPutElement(psa,&index,&bVal[index]))) ::MessageBox(NULL,"鍟婏紝鍙堝嚭姣涚梾浜嗐?,"鎻愮ず",MB_OK 鈹?MB_ICONWARNING); } varChunk.vt = VT_ARRAY鈹俈T_UI1; varChunk.parray = psa; try{ m_pRecordset->Fields->GetItem("photo")->AppendChunk(varChunk); } catch (_com_error &e) { CString str=(char*)e.Description(); ::MessageBox(NULL,str+"\n鍙堝嚭姣涚梾浜嗐?,"鎻愮ず",MB_OK 鈹?MB_ICONWARNING); } ::VariantClear(&varChunk); ::SafeArrayDestroyData( psa); if(uIsRead<ChunkSize)break; }//while(1) f.Close(); //浠庢暟鎹簱璇諱竴寮犵収鐗囷細 CFile f; f.Open("h:\\bbb.jpg",Cfile::modeWrite鈹侰file::modeCreate); long lPhotoSize = m_pRecordset->Fields->Item["photo"]->ActualSize; long lIsRead=0; _variant_t varChunk; BYTE buf[ChunkSize]; while(lPhotoSize>0) { lIsRead=lPhotoSize>=ChunkSize? ChunkSize:lPhotoSize; varChunk = m_pRecordset->Fields-> Item["photo"]->GetChunk(lIsRead); for(long index=0;index<lIsRead;index++) { ::SafeArrayGetElement(varChunk.parray,&index,buf+index); } f.Write(buf,lIsRead); lPhotoSize-=lIsRead; }//while() f.Close();
銆銆12. 浣跨敤SafeArray闂 銆銆瀛︿細浣跨敤SafeArray涔熸槸寰堥噸瑕佺殑錛屽洜涓哄湪ADO緙栫▼涓粡甯歌鐢ㄣ傚畠鐨勪富瑕佺洰鐨勬槸鐢ㄤ簬automation涓殑鏁扮粍鍨嬪弬鏁扮殑浼犻掋傚洜涓哄湪緗戠粶鐜涓紝鏁扮粍鏄笉鑳界洿鎺ヤ紶閫掔殑錛岃屽繀欏誨皢鍏跺寘瑁呮垚SafeArray銆傚疄璐ㄤ笂SafeArray灝辨槸灝嗛氬父鐨勬暟緇勫鍔犱竴涓弿榪扮錛岃鏄庡叾緇存暟銆侀暱搴︺佽竟鐣屻佸厓绱犵被鍨嬬瓑淇℃伅銆係afeArray涔熷茍涓嶅崟鐙嬌鐢紝鑰屾槸灝嗗叾鍐嶅寘瑁呭埌VARIANT綾誨瀷鐨勫彉閲忎腑錛岀劧鍚庢墠浣滀負鍙傛暟浼犻佸嚭鍘匯傚湪VARIANT鐨剉t鎴愬憳鐨勫煎鏋滃寘鍚玍T_ARRAY鈹?..,閭d箞瀹冩墍灝佽鐨勫氨鏄竴涓猄afeArray錛屽畠鐨刾array鎴愬憳鍗蟲槸鎸囧悜SafeArray鐨勬寚閽堛係afeArray涓厓绱犵殑綾誨瀷鍙互鏄疺ARIANT鑳藉皝瑁呯殑浠諱綍綾誨瀷錛屽寘鎷琕ARIANT綾誨瀷鏈韓銆? 銆銆浣跨敤SafeArray鐨勫叿浣撴楠わ細 銆銆鏂規硶涓錛?BR> 銆銆鍖呰涓涓猄afeArray錛?BR> 銆銆(1). 瀹氫箟鍙橀噺錛屽錛?BR>
VARIANT varChunk; SAFEARRAY *psa; SAFEARRAYBOUND rgsabound[1];
銆銆(2). 鍒涘緩SafeArray鎻忚堪絎︼細
uIsRead=f.Read(bVal,ChunkSize);//read array from a file. if(uIsRead==0)break; rgsabound[0].cElements =uIsRead; rgsabound[0].lLbound = 0; psa = SafeArrayCreate(VT_UI1,1,rgsabound);
銆銆(3). 鏀劇疆鏁版嵁鍏冪礌鍒癝afeArray錛?BR>
for(long index=0;index<uIsRead;index++) { if(FAILED(SafeArrayPutElement(psa,&index,&bVal[index]))) ::MessageBox(NULL,"鍑烘瘺鐥呬簡銆?,"鎻愮ず",MB_OK 鈹?MB_ICONWARNING); }
銆銆涓涓竴涓湴鏀撅紝鎸洪夯鐑︾殑銆?BR> 銆銆(4). 灝佽鍒癡ARIANT鍐咃細
varChunk.vt = VT_ARRAY鈹俈T_UI1; varChunk.parray = psa;
銆銆榪欐牱灝卞彲浠ュ皢varChunk浣滀負鍙傛暟浼犻佸嚭鍘諱簡銆?BR> 銆銆璇誨彇SafeArray涓殑鏁版嵁鐨勬楠わ細 銆銆(1). 鐢⊿afeArrayGetElement涓涓竴涓湴璇?BR>
BYTE buf[lIsRead]; for(long index=0;index<lIsRead;index++) { ::SafeArrayGetElement(varChunk.parray,&index,buf+index); }
銆銆灝辮鍒扮紦鍐插尯buf閲屼簡銆?BR> 銆銆鏂規硶浜岋細 銆銆浣跨敤SafeArrayAccessData鐩存帴璇誨啓SafeArray鐨勭紦鍐插尯錛?BR> 銆銆(1). 璇葷紦鍐插尯錛?BR>
BYTE *buf; SafeArrayAccessData(varChunk.parray, (void **)&buf); f.Write(buf,lIsRead); SafeArrayUnaccessData(varChunk.parray);
銆銆(2). 鍐欑紦鍐插尯錛?BR>
BYTE *buf; ::SafeArrayAccessData(psa, (void **)&buf); for(long index=0;index<uIsRead;index++) { buf[index]=bVal[index]; } ::SafeArrayUnaccessData(psa); varChunk.vt = VT_ARRAY鈹俈T_UI1; varChunk.parray = psa;
銆銆榪欑鏂規硶璇誨啓SafeArray閮藉彲浠ワ紝瀹冪洿鎺ユ搷綰礢afeArray鐨勬暟鎹紦鍐插尯錛屾瘮鐢⊿afeArrayGetElement鍜孲afeArrayPutElement閫熷害蹇傜壒鍒傚悎浜庤鍙栨暟鎹備絾鐢ㄥ畬涔嬪悗涓嶈蹇樹簡璋冪敤::SafeArrayUnaccessData(psa)錛屽惁鍒欎細鍑洪敊鐨勩?BR> 銆銆13. 浣跨敤涔︾( bookmark ) 銆銆涔︾鍙互鍞竴鏍囪瘑璁板綍闆嗕腑鐨勪竴涓褰曪紝鐢ㄤ簬蹇熷湴灝嗗綋鍓嶈褰曠Щ鍥炲埌宸茶闂繃鐨勮褰曪紝浠ュ強榪涜榪囨護絳夌瓑銆侾rovider浼氳嚜鍔ㄤ負璁板綍闆嗕腑鐨勬瘡涓鏉¤褰曚駭鐢熶竴涓功絳撅紝鎴戜滑鍙渶瑕佷嬌鐢ㄥ畠灝辮浜嗐傛垜浠笉鑳借瘯鍥炬樉紺恒佷慨鏀規垨姣旇緝涔︾銆侫DO鐢ㄨ褰曢泦鐨凚ookmark灞炴ц〃紺哄綋鍓嶈褰曠殑涔︾銆?BR> 銆銆鐢ㄦ硶姝ラ錛?BR> 銆銆(1). 寤虹珛涓涓猇ARIANT綾誨瀷鐨勫彉閲?BR> _variant_t VarBookmark; 銆銆(2). 灝嗗綋鍓嶈褰曠殑涔︾鍊煎瓨鍏ヨ鍙橀噺 銆銆涔熷氨鏄褰曢泦鐨凚ookmark灞炴х殑褰撳墠鍊箋?BR> VarBookmark = rst->Bookmark; 銆銆(3). 榪斿洖鍒板厛鍓嶇殑璁板綍 銆銆灝嗕繚瀛樼殑涔︾鍊艱緗埌璁板綍闆嗙殑涔︾灞炴т腑錛?BR>
// Check for whether bookmark set for a record if (VarBookmark.vt == VT_EMPTY) printf("No Bookmark set!\n"); else rst->Bookmark = VarBookmark;
銆銆璁劇疆瀹屽悗錛屽綋鍓嶈褰曞嵆浼氱Щ鍔ㄥ埌璇ヤ功絳炬寚鍚戠殑璁板綍銆?BR>銆銆14銆佽緗繃婊ゆ潯浠?BR> 銆銆Recordset瀵硅薄鐨凢ilter灞炴ц〃紺轟簡褰撳墠鐨勮繃婊ゆ潯浠躲傚畠鐨勫煎彲浠ユ槸浠ND鎴朞R榪炴帴璧鋒潵鐨勬潯浠惰〃杈懼紡錛堜笉鍚玏HERE鍏抽敭瀛楋級銆佺敱涔︾緇勬垚鐨勬暟緇勬垨ADO鎻愪緵鐨凢ilterGroupEnum鏋氫婦鍊箋備負Filter灞炴ц緗柊鍊煎悗Recordset鐨勫綋鍓嶈褰曟寚閽堜細鑷姩縐誨姩鍒版弧瓚寵繃婊ゆ潯浠剁殑絎竴涓褰曘備緥濡傦細
rst->Filter = _bstr_t ("濮撳悕='璧佃枃' AND 鎬у埆=鈥欏コ鈥?);
銆銆鍦ㄤ嬌鐢ㄦ潯浠惰〃杈懼紡鏃跺簲娉ㄦ剰涓嬪垪闂錛?BR> 銆銆錛?錛夈佸彲浠ョ敤鍦嗘嫭鍙風粍鎴愬鏉傜殑琛ㄨ揪寮?BR> 銆銆渚嬪錛?BR>
rst->Filter = _bstr_t ("(濮撳悕='璧佃枃' AND 鎬у埆=鈥欏コ鈥? OR AGE<25");
銆銆浣嗘槸寰蔣涓嶅厑璁稿湪鎷彿鍐呯敤OR錛岀劧鍚庡湪鎷彿澶栫敤AND錛屼緥濡傦細
rst->Filter = _bstr_t ("(濮撳悕='璧佃枃' OR 鎬у埆=鈥欏コ鈥? AND AGE<25");
銆銆蹇呴』淇敼涓猴細
rst->Filter = _bstr_t ("(濮撳悕='璧佃枃' AND AGE<25) OR (鎬у埆=鈥欏コ鈥?AND AGE<25)");
銆銆錛?錛夈佽〃杈懼紡涓殑姣旇緝榪愮畻絎﹀彲浠ユ槸LIKE 銆銆LIKE鍚庤姣旇緝鐨勬槸涓涓惈鏈夐氶厤絎?鐨勫瓧絎︿覆錛屾槦鍙瘋〃紺鴻嫢騫蹭釜浠繪剰鐨勫瓧絎︺?BR> 銆銆瀛楃涓茬殑棣栭儴鍜屽熬閮ㄥ彲浠ュ悓鏃跺甫鏄熷彿*
rst->Filter = _bstr_t ("濮撳悕 LIKE '*璧?' ");
銆銆涔熷彲浠ュ彧鏄熬閮ㄥ甫鏄熷彿錛?BR>
rst->Filter = _bstr_t ("濮撳悕 LIKE '璧?' ");
銆銆Filter灞炴у肩殑綾誨瀷鏄疺ariant錛屽鏋滆繃婊ゆ潯浠舵槸鐢變功絳劇粍鎴愮殑鏁扮粍錛屽垯闇灝嗚鏁扮粍杞崲涓篠afeArray錛岀劧鍚庡啀灝佽鍒頒竴涓猇ARIANT鎴朹variant_t鍨嬬殑鍙橀噺涓紝鍐嶈祴緇橣ilter灞炴с?BR> 銆銆15銆佺儲寮曚笌鎺掑簭 銆銆錛?錛夈佸緩绔嬬儲寮?BR> 銆銆褰撲互鏌愪釜瀛楁涓哄叧閿瓧鐢‵ind鏂規硶鏌ユ壘鏃訛紝涓轟簡鍔犲揩閫熷害鍙互浠ヨ瀛楁涓哄叧閿瓧鍦ㄨ褰曢泦鍐呴儴涓存椂寤虹珛绱㈠紩銆傚彧瑕佸皢璇ュ瓧孌電殑Optimize灞炴ц緗負true鍗沖彲錛屼緥濡傦細
pRst->Fields->GetItem("濮撳悕")->Properties-> GetItem("Optimize")->PutValue("True"); pRst->Find("濮撳悕 = '璧佃枃'",1,adSearchForward); ...... pRst->Fields->GetItem("濮撳悕")->Properties-> GetItem("Optimize")->PutValue("False"); pRst->Close();
銆銆璇存槑錛歄ptimize灞炴ф槸鐢盤rovider鎻愪緵鐨勫睘鎬э紙鍦ˋDO涓О涓哄姩鎬佸睘鎬э級錛孉DO鏈韓娌℃湁姝ゅ睘鎬с?BR> 銆銆錛?錛夈佹帓搴?BR> 銆銆瑕佹帓搴忎篃寰堢畝鍗曪紝鍙鎶婅鎺掑簭鐨勫叧閿瓧鍒楄〃璁劇疆鍒癛ecordset瀵硅薄鐨凷ort灞炴ч噷鍗沖彲錛屼緥濡傦細
pRstAuthors->CursorLocation = adUseClient; pRstAuthors->Open("SELECT * FROM mytable", _variant_t((IDispatch *) pConnection), adOpenStatic, adLockReadOnly, adCmdText); ...... pRst->Sort = "濮撳悕 DESC, 騫撮緞 ASC";
銆銆鍏抽敭瀛楋紙鍗沖瓧孌靛悕錛変箣闂寸敤閫楀彿闅斿紑錛屽鏋滆浠ユ煇鍏抽敭瀛楅檷搴忔帓搴忥紝鍒欏簲鍦ㄨ鍏抽敭瀛楀悗鍔犱竴絀烘牸錛屽啀鍔燚ESC錛堝涓婁緥錛夈傚崌搴忔椂ASC鍔犱笉鍔犳棤鎵璋撱傛湰鎿嶄綔鏄埄鐢ㄧ儲寮曡繘琛岀殑錛屽茍鏈繘琛岀墿鐞嗘帓搴忥紝鎵浠ユ晥鐜囪緝楂樸?BR>浣嗚娉ㄦ剰錛屽湪鎵撳紑璁板綍闆嗕箣鍓嶅繀欏誨皢璁板綍闆嗙殑CursorLocation灞炴ц緗負adUseClient錛屽涓婁緥鎵紺恒係ort灞炴у煎湪闇瑕佹椂闅忔椂鍙互淇敼銆?BR> 銆銆16銆佷簨鍔″鐞?BR> 銆銆ADO涓殑浜嬪姟澶勭悊涔熷緢綆鍗曪紝鍙渶鍒嗗埆鍦ㄩ傚綋鐨勪綅緗皟鐢–onnection瀵硅薄鐨勪笁涓柟娉曞嵆鍙紝榪欎笁涓柟娉曟槸錛?BR> 銆銆錛?錛夈佸湪浜嬪姟寮濮嬫椂璋冪敤
銆銆錛?錛夈佸湪浜嬪姟緇撴潫騫舵垚鍔熸椂璋冪敤
銆銆錛?錛夈佸湪浜嬪姟緇撴潫騫跺け璐ユ椂璋冪敤
銆銆鍦ㄤ嬌鐢ㄤ簨鍔″鐞嗘椂錛屽簲灝介噺鍑忓皬浜嬪姟鐨勮寖鍥達紝鍗沖噺灝忎粠浜嬪姟寮濮嬪埌緇撴潫錛堟彁浜ゆ垨鍥炴粴錛変箣闂寸殑鏃墮棿闂撮殧錛屼互渚挎彁楂樼郴緇熸晥鐜囥傞渶瑕佹椂涔熷彲鍦ㄨ皟鐢˙eginTrans()鏂規硶涔嬪墠錛屽厛璁劇疆Connection瀵硅薄鐨処solationLevel灞炴у鹼紝璇︾粏鍐呭鍙傝MSDN涓湁鍏矨DO鐨勬妧鏈祫鏂欍?BR>銆銆涓夈佷嬌鐢ˋDO緙栫▼甯歌闂瑙g瓟 銆銆浠ヤ笅鍧囨槸閽堝MS SQL 7.0緙栫▼鏃舵墍閬囬棶棰樿繘琛岃璁恒?BR> 銆銆1銆佽繛鎺ュけ璐ュ彲鑳藉師鍥?BR> 銆銆Enterprise Managemer鍐咃紝鎵撳紑灝嗘湇鍔″櫒鐨勫睘鎬у璇濇錛屽湪Security閫夐」鍗′腑錛屾湁涓涓夐」Authentication銆?BR> 銆銆濡傛灉璇ラ夐」鏄疻indows NT only錛屽垯浣犵殑紼嬪簭鎵鐢ㄧ殑榪炴帴瀛楃涓插氨涓瀹氳鍖呭惈Trusted_Connection鍙傛暟錛屽茍涓斿叾鍊煎繀欏諱負yes錛屽錛?BR>
"Provider=SQLOLEDB;Server=888;Trusted_Connection=yes" ";Database=master;uid=lad;";
銆銆濡傛灉涓嶆寜涓婅堪鎿嶄綔錛岀▼搴忚繍琛屾椂榪炴帴蹇呯劧澶辮觸銆?BR> 銆銆濡傛灉Authentication閫夐」鏄疭QL Server and Windows NT錛屽垯浣犵殑紼嬪簭鎵鐢ㄧ殑榪炴帴瀛楃涓插彲浠ヤ笉鍖呭惈Trusted_Connection鍙傛暟錛屽錛?BR>
"Provider=SQLOLEDB;Server=888;Database=master;uid=lad;pwd=111;";
銆銆鍥犱負ADO緇欒鍙傛暟鍙栫殑榛樿鍊煎氨鏄痭o錛屾墍浠ュ彲浠ョ渷鐣ャ傛垜璁や負榪樻槸鍙栭粯璁ゅ兼瘮杈冨畨鍏ㄤ竴浜涖?BR> 銆銆2銆佹敼鍙樺綋鍓嶆暟鎹簱鐨勬柟娉?BR> 銆銆浣跨敤Tansct-SQL涓殑USE璇彞鍗沖彲銆?BR> 銆銆3銆佸浣曞垽鏂竴涓暟鎹簱鏄惁瀛樺湪 銆銆(1)銆佸彲鎵撳紑master鏁版嵁搴撲腑涓涓彨鍋歋CHEMATA鐨勮鍥撅紝鍏跺唴瀹瑰垪鍑轟簡璇ユ湇鍔″櫒涓婃墍鏈夌殑鏁版嵁搴撳悕縐般?BR> 銆銆(2) 銆佹洿綆渚跨殑鏂規硶鏄嬌鐢║SE璇彞錛屾垚鍔熶簡灝卞瓨鍦紱涓嶆垚鍔燂紝灝變笉瀛樺湪銆備緥濡傦細
try{ m_pConnect->Execute ( _bstr_t("USE INSURANCE_2002"),NULL, adCmdText鈹俛dExecuteNoRecords ); } catch (_com_error &e) { blSuccess=FALSE; CString str="鏁版嵁搴揑NSURANCE_2002涓嶅瓨鍦紒\n"; str+=e.Description(); ::MessageBox(NULL,str,"璀﹀憡",MB_OK 鈹?MB_ICONWARNING); }
銆銆4銆佸垽鏂竴涓〃鏄惁瀛樺湪 銆銆錛?錛夈佸悓鏍峰垽鏂竴涓〃鏄惁瀛樺湪錛屼篃鍙互鐢ㄦ槸鍚︽垚鍔熷湴鎵撳紑瀹冩潵鍒ゆ柇錛屽崄鍒嗘柟渚匡紝渚嬪錛?BR>
try{ m_pRecordset->Open(_variant_t("mytable"), _variant_t((IDispatch *)m_pConnection,true), adOpenKeyset, adLockOptimistic, adCmdTable); } catch (_com_error &e) { ::MessageBox(NULL,"璇ヨ〃涓嶅瓨鍦ㄣ?,"鎻愮ず",MB_OK 鈹?MB_ICONWARNING); }
銆銆(2)銆佽涓嶇劧鍙互閲囩敤楹葷儲涓鐐圭殑鍔炴硶錛屽氨鏄湪MS-SQL鏈嶅姟鍣ㄤ笂鐨勬瘡涓暟鎹簱涓兘鏈変竴涓悕涓簊ysobjects鐨勮〃錛屾煡鐪嬫琛ㄧ殑鍐呭鍗崇煡鎸囧畾鐨勮〃鏄惁鍦ㄨ鏁版嵁搴撲腑銆?BR> 銆銆(3)銆佸悓鏍鳳紝姣忎釜鏁版嵁搴撲腑閮芥湁涓涓悕涓篢ABLES鐨勮鍥?View)錛屾煡鐪嬫瑙嗗浘鐨勫唴瀹瑰嵆鐭ユ寚瀹氱殑琛ㄦ槸鍚﹀湪璇ユ暟鎹簱涓?BR> 銆銆5銆佺被鍨嬭漿鎹㈤棶棰?BR> 銆銆錛?錛夈佺被鍨媀ARIANT_BOOL 銆銆綾誨瀷VARIANT_BOOL絳変環浜巗hort綾誨瀷銆俆he VARIANT_BOOL is equivalent to short. see it's definition below: typdef short VARIANT_BOOL 銆銆錛?錛夈乢com_ptr_t綾葷殑綾誨瀷杞崲 銆銆_ConnectionPtr鍙互鑷姩杞崲鎴怚Dspatch*綾誨瀷錛岃繖鏄洜涓篲ConnectionPtr瀹為檯涓婃槸_com_ptr_t綾葷殑涓涓疄渚嬶紝鑰岃繖涓被鏈夋綾誨瀷杞崲鍑芥暟銆?BR> 銆銆鍚岀悊錛宊RecordsetPtr鍜宊CommandPtr涔熼兘鍙互榪欐牱杞崲銆?BR> 銆銆錛?錛夈乢bstr_t鍜宊variant_t綾?BR> 銆銆鍦ˋDO緙栫▼鏃訛紝_bstr_t鍜宊variant_t榪欎袱涓被寰堟湁鐢紝鐪佸幓浜嗚澶欱STR鍜孷ARIANT綾誨瀷杞崲鐨勯夯鐑︺?BR> 銆銆6銆佹墦寮璁板綍闆嗘椂鐨勯棶棰?BR> 銆銆鍦ㄦ墦寮璁板綍闆嗘椂錛屽湪璋冪敤Recordset鐨凮pen鏂規硶鏃訛紝鍏舵渶鍚庝竴涓弬鏁伴噷涓瀹氫笉鑳藉寘鍚玜dAsyncExecute錛屽惁鍒欏皢鍥犱負鏄紓姝ユ搷浣滐紝鍦ㄨ鍙栨暟鎹椂鏃犳硶璇誨埌鏁版嵁銆?BR> 銆銆7銆佸紓甯稿鐞嗛棶棰?BR> 銆銆瀵規墍鏈夎皟鐢ˋDO鐨勮鍙ヤ竴瀹氳鐢╰ry鍜宑atch璇彞鎹曟崏寮傚父錛屽惁鍒欏湪鍙戠敓寮傚父鏃訛紝紼嬪簭浼氬紓甯擱鍑恒?BR> 銆銆8銆佷嬌鐢⊿afeArray闂 銆銆鍦ㄥ垵瀛︿嬌鐢ㄤ腑錛屾垜鏇鵑亣鍒頒竴涓激鑴戠瓔鐨勯棶棰橈紝涓瀹氳娉ㄦ剰錛?BR> 銆銆鍦ㄥ畾涔変簡SAFEARRAY鐨勬寚閽堝悗錛屽鏋滄墦綆楅噸澶嶄嬌鐢ㄥ嬈★紝鍒欏湪涓棿鍙互璋冪敤::SafeArrayDestroyData閲婃斁鏁版嵁錛屼絾鍐充笉鑳借皟鐢?:SafeArrayDestroyDescriptor錛屽惁鍒欏繀鐒跺嚭閿欙紝鍗充嬌璋冪敤SafeArrayCreate涔熶笉琛屻備緥濡傦細
SAFEARRAY *psa; ...... //When the data are no longer to be used: ::SafeArrayDestroyData( psa);
銆銆鎴戝垎鏋愬湪瀹氫箟psa鎸囬拡鏃訛紝涓涓猄AFEARRAY鐨勫疄渚嬶紙涔熷氨鏄疭AFEARRAY鎻忚堪絎︼級涔熷悓鏃惰鑷姩寤虹珛浜嗐備絾鏄彧瑕佷竴璋冪敤::SafeArrayDestroyDescriptor錛屾弿榪扮灝辮閿姣佷簡銆?BR> 銆銆鎵浠ユ垜璁や負::SafeArrayDestroyDescriptor鍙互鏍規湰灝變笉璋冪敤錛屽嵆浣胯皟鐢ㄤ篃蹇呴』鍦ㄦ渶鍚庤皟鐢ㄣ?BR> 銆銆9銆侀噸澶嶄嬌鐢ㄥ懡浠ゅ璞¢棶棰?BR> 銆銆涓涓懡浠ゅ璞″鏋滆閲嶅浣跨敤澶氭錛堝挨鍏舵槸甯﹀弬鏁扮殑鍛戒護錛夛紝鍒欏湪絎竴嬈℃墽琛屼箣鍓嶏紝搴斿皢瀹冪殑Prepared灞炴ц緗負TRUE銆傝繖鏍蜂細浣跨涓嬈℃墽琛屽噺鎱紝浣嗗嵈鍙互浣夸互鍚庣殑鎵ц鍏ㄩ儴鍔犲揩銆?BR> 銆銆10銆佺粦瀹氬瓧絎︿覆鍨嬪瓧孌甸棶棰?BR> 銆銆濡傛灉瑕佺粦瀹氱殑瀛楁鏄瓧絎︿覆綾誨瀷錛屽垯瀵瑰簲鐨勫瓧絎︽暟緇勭殑鍏冪礌涓暟涓瀹氳姣斿瓧孌甸暱搴﹀ぇ2錛堟瘮濡俶_szau_fname[22]錛屽叾緇戝畾鐨勫瓧孌礱u_fname鐨勯暱搴﹀疄闄呮槸20錛夛紝涓嶈繖鏍風粦瀹氬氨浼氬け璐ャ?BR> 銆銆11銆佷嬌鐢ˋppendChunk鐨勯棶棰?BR> 銆銆褰撶敤AddNew鏂規硶鍒氬垰鍚戣褰曢泦鍐呮坊鍔犱竴涓柊璁板綍涔嬪悗錛屼笉鑳介鍏堝悜涓涓暱鏁版嵁瀛楁錛坕mage綾誨瀷錛夊啓鍏ユ暟鎹紝蹇呴』鍏堝悜鍏朵粬瀛楁鍐欏叆榪囨暟鎹箣鍚庯紝鎵嶈兘璋冪敤AppendChunk鍐欒瀛楁錛屽惁鍒欏嚭閿欍備篃灝辨槸璇達紝AppendChunk涓嶈兘绱ф帴鍦ˋddNew涔嬪悗銆傚彟澶栵紝鍐欏叆鍏朵粬瀛楁鍚庤繕蹇呴』绱ф帴鐫璋冪敤AppendChunk錛岃屼笉鑳借皟鐢ㄨ褰曢泦鐨刄pdate鏂規硶鍚庯紝鎵嶈皟鐢ˋppendChunk錛屽惁鍒欒皟鐢ˋppendChunk鏃朵篃浼氬嚭閿欍傛崲鍙ヨ瘽璇達紝灝辨槸蹇呴』AppendChunk鍦ㄥ墠錛孶pdate鍦ㄥ悗銆傚洜鑰岃繖涓椂鍊欏氨涓嶈兘浣跨敤甯﹀弬鏁扮殑AddNew浜嗭紝鍥犱負甯﹀弬鏁扮殑AddNew浼氳嚜鍔ㄨ皟鐢ㄨ褰曢泦鐨刄pdate錛屾墍浠ppendChunk灝辮窇鍒癠pdate鐨勫悗闈簡錛屽氨鍙湁鍑洪敊浜嗭紒鍥犳錛岃繖鏃跺簲璇ョ敤涓嶅甫鍙傛暟鐨凙ddNew銆?BR> 銆銆鎴戞帹嫻嬭繖鍙兘鏄疢S SQL 7.0鐨勯棶棰橈紝鍦∕S SQL 2000涓垯涓嶅瓨鍦ㄨ繖浜涢棶棰橈紝浣嗘槸AppendChunk浠嶇劧涓嶈兘鍦║pdate涔嬪悗銆?BR> 銆銆鍥涖佸皬緇?/B> 銆銆涓鑸儏鍐典笅錛孋onnection鍜孋ommand鐨凟xecute鐢ㄤ簬鎵ц涓嶄駭鐢熻褰曢泦鐨勫懡浠わ紝鑰孯ecordset鐨凮pen鐢ㄤ簬浜х敓涓涓褰曢泦錛屽綋鐒朵篃涓嶆槸緇濆鐨勩傜壒鍒獵ommand涓昏鏄敤浜庢墽琛屽弬鏁板寲鐨勫懡浠わ紝鍙互鐩存帴鐢盋ommand瀵硅薄鎵ц錛屼篃鍙互灝咰ommand瀵硅薄浼犻掔粰Recordset鐨凮pen銆?/SPAN> ]]> Visual C++ ADO鏁版嵁搴撶紪紼嬪叆闂紙涓婏級 http://m.shnenglu.com/ivenher/articles/2293.html鐖遍キ鐩?/dc:creator>鐖遍キ鐩?/author>Fri, 30 Dec 2005 10:31:00 GMT http://m.shnenglu.com/ivenher/articles/2293.html http://m.shnenglu.com/ivenher/comments/2293.html http://m.shnenglu.com/ivenher/articles/2293.html#Feedback 0 http://m.shnenglu.com/ivenher/comments/commentRss/2293.html http://m.shnenglu.com/ivenher/services/trackbacks/2293.html 銆銆ADO 鏄洰鍓嶅湪Windows鐜涓瘮杈冩祦琛岀殑瀹㈡埛绔暟鎹簱緙栫▼鎶鏈侫DO鏄緩绔嬪湪OLE DB搴曞眰鎶鏈箣涓婄殑楂樼駭緙栫▼鎺ュ彛錛屽洜鑰屽畠鍏煎叿鏈夊己澶х殑鏁版嵁澶勭悊鍔熻兘錛堝鐞嗗悇縐嶄笉鍚岀被鍨嬬殑鏁版嵁婧愩佸垎甯冨紡鐨勬暟鎹鐞嗙瓑絳夛級鍜屾瀬鍏剁畝鍗曘佹槗鐢ㄧ殑緙栫▼鎺ュ彛錛屽洜鑰屽緱鍒頒簡騫挎硾鐨勫簲鐢ㄣ傝屼笖鎸夊井杞叕鍙哥殑鎰忓浘錛孫LE DB鍜孉DO灝嗛愭鍙栦唬 ODBC鍜孌AO銆傜幇鍦ㄤ粙緇岮DO鍚勭搴旂敤鐨勬枃绔犲拰涔︾睄鏈夊緢澶氾紝鏈枃鐫閲嶇珯鍦ㄥ垵瀛﹁呯殑瑙掑害錛岀畝瑕佹帰璁ㄤ竴涓嬪湪VC++涓嬌鐢ˋDO緙栫▼鏃剁殑涓浜涢棶棰樸傛垜浠笇鏈涢槄璇繪湰鏂囦箣鍓嶏紝鎮ㄥADO鎶鏈殑鍩烘湰鍘熺悊鏈変竴浜涗簡瑙c?BR> 銆銆涓銆佸湪VC++涓嬌鐢ˋDO緙栫▼ 銆銆ADO瀹為檯涓婂氨鏄敱涓緇凙utomation瀵硅薄鏋勬垚鐨勭粍浠訛紝鍥犳鍙互璞′嬌鐢ㄥ叾瀹冧換浣旳utomation瀵硅薄涓鏍蜂嬌鐢ˋDO銆侫DO涓渶閲嶈鐨勫璞℃湁涓変釜錛欳onnection銆丆ommand鍜孯ecordset錛屽畠浠垎鍒〃紺鴻繛鎺ュ璞°佸懡浠ゅ璞″拰璁板綍闆嗗璞°傚鏋滄偍鐔熸倝浣跨敤MFC涓殑ODBC綾伙紙CDatabase銆丆Recordset)緙栫▼錛岄偅涔堝涔燗DO緙栫▼灝卞崄鍒嗗鏄撲簡銆?BR> 銆銆浣跨敤ADO緙栫▼鏃跺彲浠ラ噰鐢ㄤ互涓嬩笁縐嶆柟娉曚箣涓錛?BR> 銆銆1銆佷嬌鐢ㄩ澶勭悊鎸囦護#import
#import "C:\Program Files\Common Files\System\ADO\msado15.dll" \ no_namespace rename("EOF", "EndOfFile")
銆銆浣嗚娉ㄦ剰涓嶈兘鏀懼湪stdAfx.h鏂囦歡鐨勫紑澶達紝鑰屽簲璇ユ斁鍦ㄦ墍鏈塱nclude鎸囦護鐨勫悗闈€傚惁鍒欏湪緙栬瘧鏃朵細鍑洪敊銆?BR>紼嬪簭鍦ㄧ紪璇戣繃紼嬩腑錛孷C++浼氳鍑簃sado15.dll涓殑綾誨瀷搴撲俊鎭紝鑷姩浜х敓涓や釜璇ョ被鍨嬪簱鐨勫ご鏂囦歡鍜屽疄鐜版枃浠秏sado15.tlh鍜宮sado15.tli錛堝湪鎮ㄧ殑Debug鎴朢elease鐩綍涓嬶級銆傚湪榪欎袱涓枃浠墮噷瀹氫箟浜咥DO鐨勬墍鏈夊璞″拰鏂規硶錛屼互鍙婁竴浜涙灇涓懼瀷鐨勫父閲忕瓑銆傛垜浠殑紼嬪簭鍙鐩存帴璋冪敤榪欎簺鏂規硶灝辮浜嗭紝涓庝嬌鐢∕FC涓殑COleDispatchDriver綾昏皟鐢ˋutomation瀵硅薄鍗佸垎綾諱技銆?BR> 銆銆2銆佷嬌鐢∕FC涓殑CIDispatchDriver 銆銆灝辨槸閫氳繃璇誨彇msado15.dll涓殑綾誨瀷搴撲俊鎭紝寤虹珛涓涓狢OleDispatchDriver綾葷殑媧劇敓綾伙紝鐒跺悗閫氳繃瀹冭皟鐢ˋDO瀵硅薄銆?BR> 銆銆3銆佺洿鎺ョ敤COM鎻愪緵鐨凙PI 銆銆濡備嬌鐢ㄥ涓嬩唬鐮侊細
CLSID clsid; HRESULT hr = ::CLSIDFromProgID(L"ADODB.Connection", &clsid); if(FAILED(hr)) {...} ::CoCreateInstance(clsid, NULL, CLSCTX_SERVER, IID_IDispatch, (void **) &pDispatch); if(FAILED(hr)) {...}
銆銆浠ヤ笂涓夌鏂規硶錛岀涓鍜岀浜岀綾諱技錛屽彲鑳界涓縐嶅ソ鐢ㄤ竴浜涳紝絎笁縐嶇紪紼嬪彲鑳芥渶楹葷儲銆備絾鍙兘絎笁縐嶆柟娉曚篃鏄晥鐜囨渶楂樼殑錛岀▼搴忕殑灝哄涔熸渶灝忥紝騫朵笖瀵笰DO鐨勬帶鍒惰兘鍔涗篃鏈寮恒?BR> 銆銆鎹井杞祫鏂欎粙緇嶏紝絎竴縐嶆柟娉曚笉鏀寔鏂規硶璋冪敤涓殑榛樿鍙傛暟錛屽綋鐒剁浜岀鏂規硶涔熸槸榪欐牱錛屼絾絎笁縐嶅氨涓嶆槸榪欐牱浜嗐傞噰鐢ㄧ涓夌鏂規硶鐨勬按騫充篃鏈楂樸傚綋浣犻渶瑕佺粫榪嘇DO鑰岀洿鎺ヨ皟鐢∣LE DB搴曞眰鐨勬柟娉曟椂錛屽氨涓瀹氳浣跨敤絎笁縐嶆柟娉曚簡銆?BR> 銆銆ADO緙栫▼鐨勫叧閿紝灝辨槸鐔熺粌鍦拌繍鐢ˋDO鎻愪緵鐨勫悇縐嶅璞?object)銆佹柟娉?method)銆佸睘鎬?property)鍜屽鍣紙collection錛夈傚彟澶栵紝濡傛灉鏄湪MS SQL鎴朞racle絳夊ぇ鍨嬫暟鎹簱涓婄紪紼嬶紝榪樿鑳界啛緇冧嬌鐢⊿QL璇█銆?BR>銆銆浜屻佷嬌鐢?import鏂規硶鐨勭紪紼嬫楠?/B> 銆銆榪欓噷寤鴻鎮ㄤ嬌鐢?import鐨勬柟娉曪紝鍥犱負瀹冩槗瀛︺佹槗鐢紝浠g爜涔熸瘮杈冪畝媧併?BR> 銆銆1銆?娣誨姞#import鎸囦護 銆銆鎵撳紑stdafx.h鏂囦歡錛屽皢涓嬪垪鍐呭娣誨姞鍒版墍鏈夌殑include鎸囦護涔嬪悗錛?BR>
#include <icrsint.h> //Include support for VC++ Extensions #import "C:\Program Files\Common Files\System\ADO\msado15.dll" \ no_namespace rename("EOF", "adoEOF")
銆銆鍏朵腑icrsint.h鏂囦歡鍖呭惈浜哣C++鎵╁睍鐨勪竴浜涢澶勭悊鎸囦護銆佸畯絳夌殑瀹氫箟錛岀敤浜嶤OM緙栫▼鏃朵嬌鐢ㄣ?BR> 銆銆2銆佸畾涔塤ConnectionPtr鍨嬪彉閲忥紝騫跺緩绔嬫暟鎹簱榪炴帴 銆銆寤虹珛浜嗕笌鏁版嵁搴撴湇鍔″櫒鐨勮繛鎺ュ悗錛屾墠鑳借繘琛屽叾浠栨湁鍏蟲暟鎹簱鐨勮闂拰鎿嶄綔銆侫DO浣跨敤Connection瀵硅薄鏉ュ緩绔嬩笌鏁版嵁搴撴湇鍔″櫒鐨勮繛鎺ワ紝鎵浠ュ畠鐩稿綋浜嶮FC涓殑CDatabase綾匯傚拰CDatabase綾諱竴鏍鳳紝璋冪敤Connection瀵硅薄鐨凮pen鏂規硶鍗沖彲寤虹珛涓庢湇鍔″櫒鐨勮繛鎺ャ?BR> 銆銆鏁版嵁綾誨瀷 _ConnectionPtr瀹為檯涓婂氨鏄敱綾繪ā鏉縚com_ptr_t鑰屽緱鍒扮殑涓涓叿浣撶殑瀹炰緥綾伙紝鍏跺畾涔夊彲浠ュ埌msado15.tlh銆乧omdef.h 鍜宑omip.h榪欎笁涓枃浠朵腑鎵懼埌銆傚湪msado15.tlh涓湁錛?BR>
_COM_SMARTPTR_TYPEDEF(_Collection, __uuidof(_Collection));
銆銆緇忓畯鎵╁睍鍚庡氨寰楀埌浜哶ConnectionPtr綾匯俖ConnectionPtr綾誨皝瑁呬簡Connection瀵硅薄鐨処dispatch鎺ュ彛鎸囬拡錛屽強涓浜涘繀瑕佺殑鎿嶄綔銆傛垜浠氨鏄氳繃榪欎釜鎸囬拡鏉ユ搷綰礐onnection瀵硅薄銆傜被浼煎湴錛屽悗闈㈢敤鍒扮殑_CommandPtr鍜宊RecordsetPtr綾誨瀷涔熸槸榪欐牱寰楀埌鐨勶紝瀹冧滑鍒嗗埆琛ㄧず鍛戒護瀵硅薄鎸囬拡鍜岃褰曢泦瀵硅薄鐨勬寚閽堛?BR> 銆銆錛?錛夈佽繛鎺ュ埌MS SQL Server 銆銆娉ㄦ剰榪炴帴瀛楃涓茬殑鏍煎紡錛屾彁渚涙紜殑榪炴帴瀛楃涓叉槸鎴愬姛榪炴帴鍒版暟鎹簱鏈嶅姟鍣ㄧ殑絎竴姝ワ紝鏈夊叧榪炴帴瀛楃涓茬殑璇︾粏淇℃伅鍙傝寰蔣MSDN Library鍏夌洏銆?BR> 銆銆鏈緥榪炴帴瀛楃涓蹭腑鐨剆erver_name錛宒atabase_name錛寀ser_name鍜宲assword鍦ㄧ紪紼嬫椂閮藉簲璇ユ浛鎹㈡垚瀹為檯鐨勫唴瀹廣?BR>
_ConnectionPtr pMyConnect=NULL; HRESULT hr=pMyConnect.CreateInstance(__uuidof(Connection))); if(FAILED(hr))return; _bstr_t strConnect="Provider=SQLOLEDB; Server=server_name;" "Database=database_name; uid=user_name; pwd=password;"; //connecting to the database server now: try{pMyConnect->Open(strConnect,"","",NULL);} catch (_com_error &e) { ::MessageBox(NULL,e.Description(),"璀﹀憡",MB_OK 鈹?MB_ICONWARNING); }
銆銆娉ㄦ剰Connection瀵硅薄鐨凮pen鏂規硶涓殑榪炴帴瀛楃涓插弬鏁板繀欏繪槸BSTR鎴朹bstr_t綾誨瀷銆傚彟澶栵紝鏈緥鏄洿鎺ラ氳繃OLE DB Provider寤虹珛榪炴帴錛屾墍浠ユ棤闇寤虹珛鏁版嵁婧愩?BR> 銆銆錛?錛夈侀氳繃ODBC Driver榪炴帴鍒癉atabase Server榪炴帴瀛楃涓叉牸寮忎笌鐩存帴鐢∣DBC緙栫▼鏃剁殑宸笉澶氾細
_bstr_t strConnect="DSN=datasource_name; Database=database_name; uid=user_name; pwd=password;";
銆銆姝ゆ椂涓嶰DBC緙栫▼涓鏍鳳紝蹇呴』鍏堝緩绔嬫暟鎹簮銆?BR> 銆銆3銆佸畾涔塤RecordsetPtr鍨嬪彉閲忥紝騫舵墦寮鏁版嵁闆?BR> 銆銆瀹氫箟_RecordsetPtr鍨嬪彉閲忥紝鐒跺悗閫氳繃瀹冭皟鐢≧ecordset瀵硅薄鐨凮pen鏂規硶錛屽嵆鍙墦寮涓涓暟鎹泦銆傛墍浠ecordset瀵硅薄涓嶮FC涓殑CRecordset綾葷被浼鹼紝瀹冧篃鏈夊綋鍓嶈褰曘佸綋鍓嶈褰曟寚閽堢殑姒傚康銆傚錛?BR>
_RecordsetPtr m_pRecordset; if(!FAILED(m_pRecordset.CreateInstance( __uuidof( Recordset ))) { m_pDoc->m_initialized=FALSE; return; } try{ m_pRecordset->Open(_variant_t("mytable"), _variant_t((IDispatch *)pMyConnect,true), adOpenKeyset, adLockOptimistic, adCmdTable); } catch (_com_error &e) { ::MessageBox(NULL,"鏃犳硶鎵撳紑mytable琛ㄣ?,"鎻愮ず", MB_OK 鈹?MB_ICONWARNING); }
銆銆Recordset瀵硅薄鐨凮pen鏂規硶闈炲父閲嶈錛屽畠鐨勭涓涓弬鏁板彲浠ユ槸涓涓猄QL璇彞銆佷竴涓〃鐨勫悕瀛楁垨涓涓懡浠ゅ璞$瓑絳夛紱絎簩涓弬鏁板氨鏄墠闈㈠緩绔嬬殑榪炴帴瀵硅薄鐨勬寚閽堛傛澶栵紝鐢–onnection鍜孋ommand瀵硅薄鐨凟xecute鏂規硶涔熻兘寰楀埌璁板綍闆嗭紝浣嗘槸鍙鐨勩?BR>銆銆4銆佽鍙栧綋鍓嶈褰曠殑鏁版嵁 銆銆鎴戣涓鴻鍙栨暟鎹殑鏈鏂逛究鐨勬柟娉曞涓嬶細
try{ m_pRecordset->MoveFirst(); while(m_pRecordset->adoEOF==VARIANT_FALSE) { //Retrieve column's value: CString sName=(char*)(_bstr_t)(m_pRecordset->Fields->GetItem (_variant_t("name"))->Value); short cAge=(short)(m_pRecordset->Fields->GetItem (_variant_t("age"))->Value); //Do something what you want to do: ...... m_pRecordset->MoveNext(); } }//try catch (_com_error &e) { CString str=(char*)e.Description(); ::MessageBox(NULL,str+"\n鍙堝嚭姣涚梾浜嗐?,"鎻愮ず", MB_OK 鈹?MB_ICONWARNING); }
銆銆鏈緥涓殑name鍜宎ge閮芥槸瀛楁鍚嶏紝璇誨彇鐨勫瓧孌靛煎垎鍒繚瀛樺湪sName鍜宑Age鍙橀噺鍐呫備緥涓殑Fields鏄疪ecordset瀵硅薄鐨勫鍣紝GetItem鏂規硶榪斿洖鐨勬槸Field瀵硅薄錛岃孷alue鍒欐槸Field瀵硅薄鐨勪竴涓睘鎬э紙鍗寵瀛楁鐨勫鹼級銆傞氳繃姝や緥錛屽簲鎺屾彙鎿嶇旱瀵硅薄灞炴х殑鏂規硶銆備緥濡傦紝瑕佽幏寰桭ield 瀵硅薄鐨刅alue灞炴х殑鍊煎彲浠ョ洿鎺ョ敤灞炴у悕Value鏉ュ紩鐢ㄥ畠錛堝涓婁緥錛夛紝浣嗕篃鍙互璋冪敤Get鏂規硶錛屼緥濡傦細
CString sName=(char*)(_bstr_t)(m_pRecordset->Fields->GetItem (_variant_t("name"))->GetValue());
銆銆浠庢渚嬭繕鍙互鐪嬪埌錛屽垽鏂槸鍚﹀埌杈捐褰曢泦鐨勬湯灝撅紝浣跨敤璁板綍闆嗙殑adoEOF灞炴э紝鍏跺艱嫢涓虹湡鍗沖埌浜嗙粨灝撅紝鍙嶄箣鍒欐湭鍒般傚垽鏂槸鍚﹀埌杈捐褰曢泦寮澶達紝鍒欏彲鐢˙OF灞炴с?BR> 銆銆鍙﹀錛岃鍙栨暟鎹繕鏈変竴涓柟娉曪紝灝辨槸瀹氫箟涓涓粦瀹氱殑綾伙紝鐒跺悗閫氳繃緇戝畾鐨勫彉閲忓緱鍒板瓧孌靛鹼紙璇﹁鍚庨潰鐨勪粙緇嶏級銆?BR> 銆銆5銆佷慨鏀規暟鎹?BR> 銆銆鏂規硶涓錛?BR>
try{ m_pRecordset->MoveFirst(); while(m_pRecordset->adoEOF==VARIANT_FALSE) { m_pRecordset->Fields->GetItem (_variant_t("濮撳悕"))->Value=_bstr_t("璧佃枃"); ...... m_pRecordset->Update(); m_pRecordset->MoveNext(); } }//try
銆銆鏀瑰彉浜哣alue灞炴х殑鍊鹼紝鍗蟲敼鍙樹簡瀛楁鐨勫箋?BR> 銆銆鏂規硶浜岋細
m_pRecordset->Fields->GetItem (_variant_t("濮撳悕"))->PutValue(_bstr_t("璧佃枃"));
銆銆鏂規硶涓夛細灝辨槸鐢ㄥ畾涔夌粦瀹氱被鐨勬柟娉曪紙璇﹁鍚庨潰鐨勪粙緇嶏級銆?BR> 銆銆6銆佹坊鍔犺褰?BR> 銆銆鏂拌褰曟坊鍔犳垚鍔熷悗錛屽嵆鑷姩鎴愪負褰撳墠璁板綍銆侫ddNew鏂規硶鏈変袱縐嶅艦寮忥紝涓涓惈鏈夊弬鏁幫紝鑰屽彟涓涓垯涓嶅甫鍙傛暟銆?BR> 銆銆鏂規硶涓錛堜笉甯﹀弬鏁幫級錛?BR>
// Add new record into this table: try{ if(!m_pRecordset->Supports(adAddNew)) return; m_pRecordset->AddNew(); m_pRecordset->Fields->GetItem (_variant_t("濮撳悕"))->Value=_bstr_t("璧佃枃"); m_pRecordset->Fields->GetItem (_variant_t("鎬у埆"))->Value=_bstr_t("濂?); m_pRecordset->Fields->GetItem (_variant_t("age"))->Value=_variant_t((short)20); m_pRecordset->Fields->GetItem (_variant_t("marry"))->Value=_bstr_t("鏈"); m_pRecordset->Update(); }//try catch (_com_error &e) { ::MessageBox(NULL, "鍙堝嚭姣涚梾浜嗐?,"鎻愮ず",MB_OK 鈹?MB_ICONWARNING); }
銆銆榪欑鏂規硶寮勫畬浜嗚繕瑕佽皟鐢║pdate()銆?BR> 銆銆鏂規硶浜岋紙甯﹀弬鏁幫級錛?BR>
_variant_t varName[4],narValue[4]; varName[0] = L"濮撳悕"; varName[1] = L"鎬у埆"; varName[2] = L"age"; varName[3] = L"marry"; narValue[0]=_bstr_t("璧佃枃"); narValue[1]=_bstr_t("濂?); narValue[2]=_variant_t((short)20); narValue[3]=_bstr_t("鏈"); const int nCrit = sizeof varName / sizeof varName[0]; // Create SafeArray Bounds and initialize the array SAFEARRAYBOUND rgsaName[1],rgsaValue[1]; rgsaName[0].lLbound = 0; rgsaName[0].cElements = nCrit; SAFEARRAY *psaName = SafeArrayCreate( VT_VARIANT, 1, rgsaName ); rgsaValue[0].lLbound = 0; rgsaValue[0].cElements = nCrit; SAFEARRAY *psaValue = SafeArrayCreate( VT_VARIANT, 1, rgsaValue ); // Set the values for each element of the array HRESULT hr1=S_OK.hr2=S_OK; for( long i = 0 ; i < nCrit && SUCCEEDED( hr1 ) && SUCCEEDED( hr2 );i++) { hr1=SafeArrayPutElement(psaName, &i,&varName[i]); hr2=SafeArrayPutElement(psaValue, &i,&narValue[i]); } // Initialize and fill the SafeArray VARIANT vsaName,vsaValue; vsaName.vt = VT_VARIANT 鈹?VT_ARRAY; vsaValue.vt = VT_VARIANT 鈹?VT_ARRAY; V_ARRAY(&vsaName) = psaName;//&vsaName->parray=psaName; //see definition in oleauto.h file. V_ARRAY(&vsaValue) = psaValue; // Add a new record: m_pRecordset->AddNew(vsaName,vsaValue);
銆銆榪欑鏂規硶涓嶉渶瑕佽皟鐢║pdate錛屽洜涓烘坊鍔犲悗錛孉DO浼氳嚜鍔ㄨ皟鐢ㄥ畠銆傛鏂規硶涓昏鏄嬌鐢⊿afeArray鎸洪夯鐑︺?BR> 銆銆鏂規硶涓夛細灝辨槸鐢ㄥ畾涔夌粦瀹氱被鐨勬柟娉曪紙璇﹁鍚庨潰鐨勪粙緇嶏級銆?BR>銆7銆佸垹闄よ褰?BR> 銆銆璋冪敤Recordset鐨凞elete鏂規硶灝辮浜嗭紝鍒犻櫎鐨勬槸褰撳墠璁板綍銆傝浜嗚ВDelete鐨勫叾瀹冪敤娉曡鏌ラ槄鍙傝冩枃鐚?BR>
try{ m_pRecordset->MoveFirst(); while(m_pRecordset->adoEOF==VARIANT_FALSE) { CString sName=(char*)(_bstr_t)(m_pRecordset->Fields->GetItem (_variant_t("濮撳悕"))->Value); if(::MessageBox(NULL,"濮撳悕="+sName+"\n鍒犻櫎濂瑰悧錛?, "鎻愮ず",MB_YESNO 鈹?MB_ICONWARNING)==IDYES) { m_pRecordset->Delete(adAffectCurrent); m_pRecordset->Update(); } m_pRecordset->MoveNext(); } }//try catch (_com_error &e) { ::MessageBox(NULL,"鍙堝嚭姣涚梾浜嗐?,"鎻愮ず",MB_OK 鈹?MB_ICONWARNING); }
銆銆8銆佷嬌鐢ㄥ甫鍙傛暟鐨勫懡浠?BR> 銆銆Command瀵硅薄鎵浠h〃鐨勫氨鏄竴涓狿rovider鑳藉鐞嗚В鐨勫懡浠わ紝濡係QL璇彞絳夈備嬌鐢–ommand瀵硅薄鐨勫叧閿氨鏄妸琛ㄧず鍛戒護鐨勮鍙ヨ緗埌CommandText灞炴т腑錛岀劧鍚庤皟鐢–ommand瀵硅薄鐨凟xecute鏂規硶灝辮浜嗐備竴鑸儏鍐典笅鍦ㄥ懡浠や腑鏃犻渶浣跨敤鍙傛暟錛屼絾鏈夋椂浣跨敤鍙傛暟錛屽彲浠ュ鍔犲叾鐏墊椿鎬у拰鏁堢巼銆?BR> 銆銆(1). 寤虹珛榪炴帴銆佸懡浠ゅ璞″拰璁板綍闆嗗璞?BR> 銆銆鏈緥涓〃紺哄懡浠ょ殑璇彞灝辨槸涓涓猄QL璇彞錛圫ELECT璇彞錛夈係ELECT璇彞涓殑闂彿?灝變唬琛ㄥ弬鏁幫紝濡傛灉瑕佸涓弬鏁幫紝灝卞鏀懼嚑涓棶鍙鳳紝姣忎釜闂彿浠h〃涓涓弬鏁般?BR>
_ConnectionPtr Conn1; _CommandPtr Cmd1; ParametersPtr *Params1 = NULL; // Not an instance of a smart pointer. _ParameterPtr Param1; _RecordsetPtr Rs1; try { // Create Connection Object (1.5 Version) Conn1.CreateInstance( __uuidof( Connection ) ); Conn1->ConnectionString = bstrConnect; Conn1->Open( bstrEmpty, bstrEmpty, bstrEmpty, -1 ); // Create Command Object Cmd1.CreateInstance( __uuidof( Command ) ); Cmd1->ActiveConnection = Conn1; Cmd1->CommandText = _bstr_t("SELECT * FROM mytable WHERE age< ?"); }//try
銆銆瑕佹敞鎰忓懡浠ゅ璞″繀欏諱笌榪炴帴瀵硅薄鍏寵仈璧鋒潵鎵嶈兘璧蜂綔鐢紝鏈緥涓皢鍛戒護瀵硅薄鐨凙ctiveConnection灞炴ц緗負榪炴帴瀵硅薄鐨勬寚閽堬紝鍗充負姝ょ洰鐨勶細
Cmd1->ActiveConnection = Conn1;
銆銆(2). 鍒涘緩鍙傛暟瀵硅薄錛屽茍緇欏弬鏁拌祴鍊?BR>
// Create Parameter Object Param1 = Cmd1->CreateParameter( _bstr_t(bstrEmpty), adInteger, adParamInput, -1, _variant_t( (long) 5) ); Param1->Value = _variant_t( (long) 5 ); Cmd1->Parameters->Append( Param1 );
銆銆鐢ㄥ懡浠ゅ璞$殑鏂規硶鏉ュ垱寤轟竴涓弬鏁板璞★紝鍏朵腑鐨勯暱搴﹀弬鏁幫紙絎笁涓級濡傛灉鏄浐瀹氶暱搴︾殑綾誨瀷錛屽氨濉?1錛屽鏋滄槸瀛楃涓茬瓑鍙彉闀垮害鐨勫氨濉叾瀹為檯闀垮害銆侾arameters鏄懡浠ゅ璞$殑涓涓鍣紝瀹冪殑Append鏂規硶灝辨槸鎶婂垱寤虹殑鍙傛暟瀵硅薄榪藉姞鍒拌瀹瑰櫒閲屻侫ppend榪涘幓鐨勫弬鏁版寜鍏堝悗欏哄簭涓嶴QL璇彞涓殑闂彿浠庡乏鑷沖彸涓涓瀵瑰簲銆?BR> 銆銆(3). 鎵ц鍛戒護鎵撳紑璁板綍闆?BR>
// Open Recordset Object Rs1 = Cmd1->Execute( &vtEmpty, &vtEmpty2, adCmdText );
銆銆浣嗚娉ㄦ剰錛岀敤Command鍜孋onnection瀵硅薄鐨凟xecute鏂規硶寰楀埌鐨凴ecordset鏄彧璇葷殑銆傚洜涓哄湪鎵撳紑Recordset涔嬪墠錛屾垜浠棤娉曡緗畠鐨凩ockType灞炴э紙鍏墮粯璁ゅ間負鍙錛夈傝屽湪鎵撳紑涔嬪悗璁劇疆LockType涓嶈搗浣滅敤銆?BR> 銆銆鎴戝彂鐜扮敤涓婅堪鏂規硶寰楀埌璁板綍闆哛s1鍚庯紝涓嶄絾Rs1涓殑璁板綍鏃犳硶淇敼錛屽嵆浣跨洿鎺ョ敤SQL璇彞淇敼鍚屼竴琛ㄤ腑浠諱綍璁板綍閮戒笉琛屻?BR> 銆銆瑕佹兂鑳戒慨鏀規暟鎹紝榪樻槸瑕佺敤Recordset鑷繁鐨凮pen鏂規硶鎵嶈錛屽錛?BR>
try{ m_pRecordset->Open((IDispatch *) Cmd1, vtMissing, adOpenStatic, adLockOptimistic, adCmdUnspecified); } catch (_com_error &e) { ::MessageBox(NULL,"mytable琛ㄤ笉瀛樺湪銆?,"鎻愮ず",MB_OK 鈹?MB_ICONWARNING); }
銆銆Recordset瀵硅薄鐨凮pen鏂規硶鐪熸槸澶ソ浜嗭紝鍏剁涓涓弬鏁板彲浠ユ槸SQL璇彞銆佽〃鍚嶅瓧銆佸懡浠ゅ璞℃寚閽堢瓑絳夈?BR> 銆銆9銆佸搷搴擜DO鐨勯氱煡浜嬩歡 銆銆閫氱煡浜嬩歡灝辨槸褰撴煇涓壒瀹氫簨浠跺彂鐢熸椂錛岀敱Provider閫氱煡瀹㈡埛紼嬪簭錛屾崲鍙ヨ瘽璇達紝灝辨槸鐢盤rovider璋冪敤瀹㈡埛紼嬪簭涓殑涓涓壒瀹氱殑鏂規硶錛堝嵆浜嬩歡鐨勫鐞嗗嚱鏁幫級銆傛墍浠ヤ負浜嗗搷搴斾竴涓簨浠訛紝鏈鍏抽敭鐨勫氨鏄瀹炵幇浜嬩歡鐨勫鐞嗗嚱鏁般?BR> 銆銆(1). 浠嶤onnectionEventsVt鎺ュ彛媧劇敓鍑轟竴涓被 銆銆涓轟簡鍝嶅簲_Connection鐨勯氱煡浜嬩歡錛屽簲璇ヤ粠ConnectionEventsVt鎺ュ彛媧劇敓鍑轟竴涓被錛?BR>
class CConnEvent : public ConnectionEventsVt { private: ULONG m_cRef; public: CConnEvent() { m_cRef = 0; }; ~CConnEvent() {}; STDMETHODIMP QueryInterface(REFIID riid, void ** ppv); STDMETHODIMP_(ULONG) AddRef(void); STDMETHODIMP_(ULONG) Release(void); STDMETHODIMP raw_InfoMessage( struct Error *pError, EventStatusEnum *adStatus, struct _Connection *pConnection); STDMETHODIMP raw_BeginTransComplete( LONG TransactionLevel, struct Error *pError, EventStatusEnum *adStatus, struct _Connection *pConnection); ...... };
銆銆銆(2). 瀹炵幇姣忎竴涓簨浠剁殑澶勭悊鍑芥暟(鍑℃槸甯aw_鍓嶇紑鐨勬柟娉曢兘鎶婂畠瀹炵幇浜?錛?BR>
STDMETHODIMP CConnEvent::raw_InfoMessage( struct Error *pError, EventStatusEnum *adStatus, struct _Connection *pConnection) { *adStatus = adStatusUnwantedEvent; return S_OK; };
銆銆鏈変簺鏂規硶铏界劧浣犲茍涓嶉渶瑕侊紝浣嗕篃蹇呴』瀹炵幇瀹冿紝鍙渶綆鍗曞湴榪斿洖涓涓猄_OK鍗沖彲銆備絾濡傛灉瑕侀伩鍏嶇粡甯歌璋冪敤錛岃繕搴斿湪鍏朵腑灝哸dStatus鍙傛暟璁劇疆涓篴dStatusUnwantedEvent錛屽垯鍦ㄦ湰嬈¤皟鐢ㄥ悗錛屼互鍚庡氨涓嶄細琚皟鐢ㄤ簡銆?BR>鍙﹀榪樺繀欏誨疄鐜癚ueryInterface, AddRef, 鍜孯elease涓変釜鏂規硶:
STDMETHODIMP CConnEvent::QueryInterface(REFIID riid, void ** ppv) { *ppv = NULL; if (riid == __uuidof(IUnknown) 鈹傗攤 riid == __uuidof(ConnectionEventsVt)) *ppv = this; if (*ppv == NULL) return ResultFromScode(E_NOINTERFACE); AddRef(); return NOERROR; } STDMETHODIMP_(ULONG) CConnEvent::AddRef() { return ++m_cRef; }; STDMETHODIMP_(ULONG) CConnEvent::Release() { if (0 != --m_cRef) return m_cRef; delete this; return 0; }
銆銆(3). 寮濮嬪搷搴旈氱煡浜嬩歡
// Start using the Connection events IConnectionPointContainer *pCPC = NULL; IConnectionPoint *pCP = NULL; hr = pConn.CreateInstance(__uuidof(Connection)); if (FAILED(hr)) return; hr = pConn->QueryInterface(__uuidof(IConnectionPointContainer), (void **)&pCPC); if (FAILED(hr)) return; hr = pCPC->FindConnectionPoint(__uuidof(ConnectionEvents), &pCP); pCPC->Release(); if (FAILED(hr)) return; pConnEvent = new CConnEvent(); hr = pConnEvent->QueryInterface(__uuidof(IUnknown), (void **) &pUnk); if (FAILED(hr)) return rc; hr = pCP->Advise(pUnk, &dwConnEvt); pCP->Release(); if (FAILED(hr)) return; pConn->Open("dsn=Pubs;", "sa", "", adConnectUnspecified);
銆銆涔熷氨鏄鍦ㄨ繛鎺?Open)涔嬪墠灝卞仛榪欎簺浜嬨?BR> 銆銆(4). 鍋滄鍝嶅簲閫氱煡浜嬩歡
pConn->Close(); // Stop using the Connection events hr = pConn->QueryInterface(__uuidof(IConnectionPointContainer), (void **) &pCPC); if (FAILED(hr)) return; hr = pCPC->FindConnectionPoint(__uuidof(ConnectionEvents), &pCP); pCPC->Release(); if (FAILED(hr)) return rc; hr = pCP->Unadvise( dwConnEvt ); pCP->Release(); if (FAILED(hr)) return;
銆銆鍦ㄨ繛鎺ュ叧闂箣鍚庡仛榪欎歡浜嬨? ]]> _variant_t 鍒般CString 杞崲 http://m.shnenglu.com/ivenher/articles/2289.html鐖遍キ鐩?/dc:creator>鐖遍キ鐩?/author>Fri, 30 Dec 2005 08:45:00 GMT http://m.shnenglu.com/ivenher/articles/2289.html http://m.shnenglu.com/ivenher/comments/2289.html http://m.shnenglu.com/ivenher/articles/2289.html#Feedback 3 http://m.shnenglu.com/ivenher/comments/commentRss/2289.html http://m.shnenglu.com/ivenher/services/trackbacks/2289.html 鏁版嵁綾誨瀷杞崲鍑芥暟
CString CZjyDlg::VariantToString(VARIANT var)
{
CString strValue;
_variant_t var_t;
_bstr_t bstr_t;
time_t cur_time;
CTime time_value;
COleCurrency var_currency;
switch(var.vt)
{
case VT_EMPTY:
case VT_NULL:strValue=_T("");break;
case VT_UI1:strValue.Format("%d",var.bVal);break;
case VT_I2:strValue.Format("%d",var.iVal);break;
case VT_I4:strValue.Format("%d",var.lVal);break;
case VT_R4:strValue.Format("%f",var.fltVal);break;
case VT_R8:strValue.Format("%f",var.dblVal);break;
case VT_CY:
var_currency=var;
strValue=var_currency.Format(0);break;
case VT_BSTR:
var_t =var;
bstr_t=var_t;
strValue.Format("%s",(const char *)bstr_t);break;
case VT_DATE:
cur_time=var.date;
time_value=cur_time;
strValue.Format("%A,%B,%d,%Y");break;
case VT_BOOL:strValue.Format("%d",var.boolVal);break;
default:strValue=_T("");break;
}
return strValue;
}
]]> ado 鍑洪敊澶勭悊 http://m.shnenglu.com/ivenher/articles/2150.html鐖遍キ鐩?/dc:creator>鐖遍キ鐩?/author>Mon, 26 Dec 2005 12:13:00 GMT http://m.shnenglu.com/ivenher/articles/2150.html http://m.shnenglu.com/ivenher/comments/2150.html http://m.shnenglu.com/ivenher/articles/2150.html#Feedback 2 http://m.shnenglu.com/ivenher/comments/commentRss/2150.html http://m.shnenglu.com/ivenher/services/trackbacks/2150.html 3127鈥斺旀病鏈夋壘鍒扮洰鏍囪〃 3092鈥斺旂洰鏍囪〃宸茬粡瀛樺湪 渚嬪錛?BR>catch(const _com_error e) { AfxMessageBox(e.Description()); long errorCode=e.WCode(); if(3127==errorCode) AfxMessageBox("琛ㄤ笉瀛樺湪"); if(3092==errorCode) AfxMessageBox("琛ㄥ凡緇忓瓨鍦?); return FALSE; } ]]> 鐢ˋDO鎿嶄綔鏁版嵁搴撶殑鏂規硶姝ラ http://m.shnenglu.com/ivenher/articles/2149.html鐖遍キ鐩?/dc:creator>鐖遍キ鐩?/author>Mon, 26 Dec 2005 11:37:00 GMT http://m.shnenglu.com/ivenher/articles/2149.html http://m.shnenglu.com/ivenher/comments/2149.html http://m.shnenglu.com/ivenher/articles/2149.html#Feedback 0 http://m.shnenglu.com/ivenher/comments/commentRss/2149.html http://m.shnenglu.com/ivenher/services/trackbacks/2149.html /***********************ADO鎺ュ彛綆浠?***********************************/ ADO搴撳寘鍚笁涓熀鏈帴鍙?_ConnectionPtr鎺ュ彛銆乢CommandPtr鎺ュ彛鍜宊RecordsetPtr鎺ュ彛銆? _ConnectionPtr鎺ュ彛榪斿洖涓涓褰曢泦鎴栦竴涓┖鎸囬拡銆?BR>閫氬父浣跨敤瀹冩潵鍒涘緩涓涓暟鎹繛鎺ユ垨鎵ц涓鏉′笉榪斿洖浠諱綍緇撴灉鐨凷QL璇彞錛屽涓涓瓨鍌ㄨ繃紼嬨?BR>浣跨敤_ConnectionPtr鎺ュ彛榪斿洖涓涓褰曢泦涓嶆槸涓涓ソ鐨勪嬌鐢ㄦ柟娉曘?BR>閫氬父鍚孋database涓鏍鳳紝浣跨敤瀹冨垱寤轟竴涓暟鎹繛鎺ワ紝鐒跺悗浣跨敤鍏跺畠瀵硅薄鎵ц鏁版嵁杈撳叆杈撳嚭鎿嶄綔銆?BR> _CommandPtr鎺ュ彛榪斿洖涓涓褰曢泦銆?BR>瀹冩彁渚涗簡涓縐嶇畝鍗曠殑鏂規硶鏉ユ墽琛岃繑鍥炶褰曢泦鐨勫瓨鍌ㄨ繃紼嬪拰SQL璇彞銆?BR>鍦ㄤ嬌鐢╛CommandPtr鎺ュ彛鏃訛紝浣犲彲浠ュ埄鐢ㄥ叏灞_ConnectionPtr鎺ュ彛錛屼篃鍙互鍦╛CommandPtr鎺ュ彛閲岀洿鎺ヤ嬌鐢ㄨ繛鎺ヤ覆銆?BR>濡傛灉浣犲彧鎵ц涓嬈℃垨鍑犳鏁版嵁璁塊棶鎿嶄綔錛屽悗鑰呮槸姣旇緝濂界殑閫夋嫨銆?BR>浣嗗鏋滀綘瑕侀綣佽闂暟鎹簱錛屽茍瑕佽繑鍥炲緢澶氳褰曢泦錛岄偅涔堬紝浣犲簲璇ヤ嬌鐢ㄥ叏灞_ConnectionPtr鎺ュ彛鍒涘緩涓涓暟鎹繛鎺ワ紝 鐒跺悗浣跨敤_CommandPtr鎺ュ彛鎵ц瀛樺偍榪囩▼鍜孲QL璇彞銆?BR> _RecordsetPtr鏄竴涓褰曢泦瀵硅薄銆?BR>涓庝互涓婁袱縐嶅璞$浉姣旓紝瀹冨璁板綍闆嗘彁渚涗簡鏇村鐨勬帶鍒跺姛鑳斤紝濡傝褰曢攣瀹氾紝娓告爣鎺у埗絳?BR>銆傚悓_CommandPtr鎺ュ彛涓鏍鳳紝瀹冧笉涓瀹氳浣跨敤涓涓凡緇忓垱寤虹殑鏁版嵁榪炴帴錛?BR>鍙互鐢ㄤ竴涓繛鎺ヤ覆浠f浛榪炴帴鎸囬拡璧嬬粰_RecordsetPtr鐨刢onnection鎴愬憳鍙橀噺錛岃瀹冭嚜宸卞垱寤烘暟鎹繛鎺ャ?BR>濡傛灉浣犺浣跨敤澶氫釜璁板綍闆嗭紝鏈濂界殑鏂規硶鏄悓Command瀵硅薄涓鏍蜂嬌鐢ㄥ凡緇忓垱寤轟簡鏁版嵁榪炴帴鐨勫叏灞_ConnectionPtr鎺ュ彛 錛岀劧鍚庝嬌鐢╛RecordsetPtr鎵ц瀛樺偍榪囩▼鍜孲QL璇彞銆?BR> /***********************鍩烘湰嫻佺▼***********************************/ (1)鍒濆鍖朇OM搴擄紝寮曞叆ADO搴撳畾涔夋枃浠?BR>(2)鐢–onnection瀵硅薄榪炴帴鏁版嵁搴?BR>(3)鍒╃敤寤虹珛濂界殑榪炴帴錛岄氳繃Connection銆丆ommand瀵硅薄鎵цSQL鍛戒護錛屾垨鍒╃敤Recordset瀵硅薄鍙栧緱緇撴灉璁?BR> 褰曢泦榪涜鏌ヨ銆佸鐞嗐?BR>(4)浣跨敤瀹屾瘯鍚庡叧闂繛鎺ラ噴鏀懼璞°?BR> /***********************銆?銆慍OM搴撶殑鍒濆鍖?**********************************/ 鎴戜滑鍙互浣跨敤AfxOleInit()鏉ュ垵濮嬪寲COM搴擄紝榪欓」宸ヤ綔閫氬父鍦–WinApp::InitInstance()鐨勯噸杞藉嚱鏁頒腑瀹?BR>鎴愶紝璇風湅濡備笅浠g爜: BOOL CADOTest1App::InitInstance() { AfxOleInit(); ...... } /*****************銆?銆戠敤#import鎸囦護寮曞叆ADO綾誨瀷搴?*********************/ 鎴戜滑鍦╯tdafx.h涓姞鍏ュ涓嬭鍙ワ細 #import "c:\program files\common files\system\ado\msado15.dll" no_namespace rename("EOF","adoEOF") 鍏舵渶緇堜綔鐢ㄥ悓鎴戜滑鐔熸倝鐨?include綾諱技,緙栬瘧鐨勬椂鍊欑郴緇熶細涓烘垜浠敓鎴恗sado15.tlh,ado15.tli涓や釜C++澶存枃浠舵潵瀹氫箟ADO搴撱?BR> /***************銆?銆戝垱寤篊onnection瀵硅薄騫惰繛鎺ユ暟鎹簱********************/ 棣栧厛鎴戜滑闇瑕佹坊鍔犱竴涓寚鍚慍onnection瀵硅薄鐨勬寚閽? _ConnectionPtr m_pConnection; BOOL CADOTest1Dlg::OnInitDialog() { CDialog::OnInitDialog(); try { HRESULT hr = m_pConnection.CreateInstance("ADODB.Connection");//鍒涘緩Connection瀵硅薄 if(SUCCEEDED(hr)) { hr = m_pConnection->Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=test.mdb","","",adModeUnknown);//榪炴帴鏁版嵁搴?BR> //涓婇潰涓鍙ヤ腑榪炴帴瀛椾覆涓殑Provider鏄拡瀵笰CCESS2000鐜鐨勶紝瀵逛簬ACCESS97,闇瑕佹敼涓?Provider=Microsoft.Jet.OLEDB.3.51; } } } catch (_com_error e) //COM閿欒鍙栧緱,褰撴墽琛孋OM鍔熻兘鐨勬椂鍊欙紝濡傛灉鍑洪敊錛屽彲浠ユ崟鎹夊埌_com_error鐨勫紓甯?BR>{ CString strComError; strComError.Format("閿欒緙栧彿: %08lx\n閿欒淇℃伅: %s\n閿欒婧? %s\n閿欒鎻忚堪: %s", e.Error(), // 閿欒緙栧彿 e.ErrorMessage(), // 閿欒淇℃伅 (LPCSTR) e.Source(), // 閿欒婧?BR> (LPCSTR) e.Description()); // 閿欒鎻忚堪 ::MessageBox(NULL,strComError,"閿欒",MB_ICONEXCLAMATION); } } 涔熷彲浠ヤ嬌鐢║DL鏂囦歡榪涜榪炴帴銆?BR>try { m_pConnection.CreateInstance(__uuidof(Connection)); m_pConnection->ConnectionString ="File Name=e.udl"; m_pConnection->Open("","","",NULL); } catch(_com_error e) {....} 鈼嗗湪榪欐浠g爜涓垜浠槸閫氳繃Connection瀵硅薄鐨凮pen鏂規硶鏉ヨ繘琛岃繛鎺ユ暟鎹簱鐨勶紝涓嬮潰鏄鏂規硶鐨勫師鍨?BR> HRESULT Connection15::Open (_bstr_t ConnectionString, _bstr_t UserID, _bstr_t Password, long Options ) ConnectionString 涓鴻繛鎺ュ瓧涓? UserID 鏄敤鎴峰悕, Password 鏄櫥闄嗗瘑鐮? Options 鏄繛鎺ラ夐」,鐢ㄤ簬鎸囧畾Connection瀵硅薄瀵規暟鎹殑鏇存柊璁稿彲鏉? Options鍙互鏄涓嬪嚑涓父閲? adModeUnknown: 緙虹渷銆傚綋鍓嶇殑璁稿彲鏉冩湭璁劇疆 adModeRead: 鍙 adModeWrite: 鍙啓 adModeReadWrite: 鍙互璇誨啓 adModeShareDenyRead: 闃繪鍏跺畠Connection瀵硅薄浠ヨ鏉冮檺鎵撳紑榪炴帴 adModeShareDenyWrite: 闃繪鍏跺畠Connection瀵硅薄浠ュ啓鏉冮檺鎵撳紑榪炴帴 adModeShareExclusive: 闃繪鍏跺畠Connection瀵硅薄鎵撳紑榪炴帴 adModeShareDenyNone: 鍏佽鍏跺畠紼嬪簭鎴栧璞′互浠諱綍鏉冮檺寤虹珛榪炴帴 鈼嗗父鐢ㄧ殑鏁版嵁搴撹繛鎺ユ柟娉曪細 (1)閫氳繃JET鏁版嵁搴撳紩鎿庡ACCESS2000鏁版嵁搴撶殑榪炴帴 m_pConnection->Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\\test.mdb","","",adModeUnknown); (2)閫氳繃DSN鏁版嵁婧愬浠諱綍鏀寔ODBC鐨勬暟鎹簱榪涜榪炴帴: m_pConnection->Open("Data Source=adotest;UID=sa;PWD=;","","",adModeUnknown); //m_pConnection->Open("DSN=test;","","",0); //榪炴帴鍙綔test鐨凮DBC鏁版嵁婧? (3)涓嶉氳繃DSN瀵筍QL SERVER鏁版嵁搴撹繘琛岃繛鎺ワ細 m_pConnection->Open("driver={SQL Server};Server=127.0.0.1;DATABASE=vckbase;UID=sa;PWD=139","","",adModeUnknown); 鍏朵腑Server鏄疭QL鏈嶅姟鍣ㄧ殑鍚嶇О錛孌ATABASE鏄簱鐨勫悕縐?BR> 鈼嗗厛浠嬬粛Connection瀵硅薄涓袱涓湁鐢ㄧ殑灞炴onnectionTimeOut涓嶴tate ConnectionTimeOut鐢ㄦ潵璁劇疆榪炴帴鐨勮秴鏃舵椂闂達紝闇瑕佸湪Open涔嬪墠璋冪敤錛屼緥濡? m_pConnection->ConnectionTimeout = 5; //璁劇疆瓚呮椂鏃墮棿涓?縐?BR> m_pConnection->Open("Data Source=adotest;","","",adModeUnknown); State灞炴ф寚鏄庡綋鍓岰onnection瀵硅薄鐨勭姸鎬侊紝0琛ㄧず鍏抽棴錛?琛ㄧず宸茬粡鎵撳紑錛屾垜浠彲浠ラ氳繃 璇誨彇榪欎釜灞炴ф潵浣滅浉搴旂殑澶勭悊錛屼緥濡? if(m_pConnection->State) m_pConnection->Close(); //濡傛灉宸茬粡鎵撳紑浜嗚繛鎺ュ垯鍏抽棴瀹?BR> 4銆?*****************鎵цSQL鍛戒護騫跺彇寰楃粨鏋滆褰曢泦****************/ 涓轟簡鍙栧緱緇撴灉璁板綍闆嗭紝鎴戜滑瀹氫箟涓涓寚鍚慠ecordset瀵硅薄鐨勬寚閽? _RecordsetPtr m_pRecordset; 騫朵負鍏跺垱寤篟ecordset瀵硅薄鐨勫疄渚? m_pRecordset.CreateInstance("ADODB.Recordset"); SQL鍛戒護鐨勬墽琛屽彲浠ラ噰鐢ㄥ縐嶅艦寮忥紝涓嬮潰鎴戜滑涓榪涜闃愯堪銆?BR> 鈼?1)鍒╃敤Connection瀵硅薄鐨凟xecute鏂規硶鎵цSQL鍛戒護 Execute鏂規硶鐨勫師鍨嬪涓嬫墍紺? _RecordsetPtr Connection15::Execute (_bstr_t CommandText, VARIANT * RecordsAffected, long Options ) 鍏朵腑 CommandText 鏄懡浠ゅ瓧涓詫紝閫氬父鏄疭QL鍛戒護銆?BR> RecordsAffected 鏄搷浣滃畬鎴愬悗鎵褰卞搷鐨勮鏁? Options 琛ㄧずCommandText涓唴瀹圭殑綾誨瀷錛孫ptions鍙互鍙栧涓嬪間箣涓錛?BR> adCmdText: 琛ㄦ槑CommandText鏄枃鏈懡浠?BR> adCmdTable: 琛ㄦ槑CommandText鏄竴涓〃鍚?BR> adCmdProc: 琛ㄦ槑CommandText鏄竴涓瓨鍌ㄨ繃紼?BR> adCmdUnknown: 鏈煡 Execute鎵ц瀹屽悗榪斿洖涓涓寚鍚戣褰曢泦鐨勬寚閽堬紝涓嬮潰鎴戜滑緇欏嚭鍏蜂綋浠g爜騫朵綔璇存槑銆?nbsp; try { _variant_t ra; m_pConnection->Execute("CREATE TABLE 瀛︾敓淇℃伅(瀛﹀彿 INTEGER,濮撳悕 TEXT,騫撮緞 INTEGER,鐢熸棩 DATETIME)",&ra,adCmdText); m_pConnection->Execute("INSERT INTO 瀛︾敓淇℃伅(瀛﹀彿,濮撳悕,騫撮緞,鐢熸棩) VALUES (112105, '紼嬬孩縐',22,'1982-08-16')",&ra,adCmdText);//寰琛ㄦ牸閲岄潰娣誨姞璁板綍 m_pRecordset = m_pConnection->Execute("SELECT COUNT(*) FROM 瀛︾敓淇℃伅",&ra,adCmdText); //鎵цSQL緇熻鍛戒護寰楀埌鍖呭惈璁板綍鏉℃暟鐨勮褰曢泦 _variant_t vCount = m_pRecordset->GetCollect((_variant_t)(long)(0)); //鍙栧緱絎竴涓瓧孌電殑鍊兼斁鍏Count鍙橀噺 m_pRecordset->Close(); CString message; message.Format("鍏辨湁%d鏉¤褰?,vCount.lVal); AfxMessageBox(message); } catch (_com_error e) { ...} 鈼?2)鍒╃敤 Command瀵硅薄 鏉ユ墽琛孲QL鍛戒護 try { _CommandPtr m_pCommand; m_pCommand.CreateInstance("ADODB.Command"); m_pCommand->ActiveConnection = m_pConnection; //鍏抽敭鐨勪竴鍙ワ紝灝嗗緩绔嬬殑榪炴帴璧嬪肩粰瀹?BR> m_pCommand->CommandText="INSERT INTO 瀛︾敓淇℃伅(瀛﹀彿,濮撳悕,騫撮緞,鐢熸棩) VALUES (112105, '紼嬬孩縐',22,'1982-08-16')"; m_pCommand->Execute(NULL,NULL,adCmdText); m_pCommand->CommandText="SELECT COUNT(*) FROM 瀛︾敓淇℃伅"; m_pRecordset=m_pCommand->Execute(NULL,NULL,adCmdText); _variant_t vCount = m_pRecordset->GetCollect((_variant_t)(long)0); //鍙栧緱絎竴涓瓧孌電殑鍊?BR> CString str; str.Format("鍏辨湁%d鏉¤褰?,vCount.lVal); AfxMessageBox(str); m_pRecordset->Close(); } catch (_com_error e) {...} 鍦ㄨ繖孌典唬鐮佷腑鎴戜滑鍙槸鐢–ommand瀵硅薄鏉ユ墽琛屼簡SELECT鏌ヨ璇彞錛?BR>Command瀵硅薄鍦ㄨ繘琛屽瓨鍌ㄨ繃紼嬬殑璋冪敤涓兘鐪熸浣撶幇瀹冪殑浣滅敤銆備笅嬈℃垜浠皢璇︾粏浠嬬粛銆? 鈼?3)鐩存帴鐢≧ecordset瀵硅薄榪涜鏌ヨ鍙栧緱璁板綍闆? 渚嬪 m_pRecordset->Open("SELECT * FROM 瀛︾敓淇℃伅",_variant_t((IDispatch *)m_pConnection,true),adOpenStatic,adLockOptimistic,adCmdText); Open鏂規硶鐨勫師鍨嬫槸榪欐牱鐨? HRESULT Recordset15::Open ( const _variant_t & Source, const _variant_t & ActiveConnection, enum CursorTypeEnum CursorType, enum LockTypeEnum LockType, long Options ) 鍏朵腑錛?BR>鈶燬ource鏄暟鎹煡璇㈠瓧絎︿覆 鈶ctiveConnection鏄凡緇忓緩绔嬪ソ鐨勮繛鎺ワ紙鎴戜滑闇瑕佺敤Connection瀵硅薄鎸囬拡鏉ユ瀯閫犱竴涓猒variant_t瀵硅薄) 鈶ursorType鍏夋爣綾誨瀷錛屽畠鍙互鏄互涓嬪間箣涓,璇風湅榪欎釜鏋氫婦緇撴瀯: enum CursorTypeEnum { adOpenUnspecified = -1, //涓嶄綔鐗瑰埆鎸囧畾 adOpenForwardOnly = 0, //鍓嶆粴闈欐佸厜鏍囥傝繖縐嶅厜鏍囧彧鑳藉悜鍓嶆祻瑙堣褰曢泦錛屾瘮濡傜敤MoveNext鍚戝墠婊氬姩,榪欑鏂瑰紡鍙互鎻愰珮嫻忚閫熷害銆備絾璇稿BookMark,RecordCount,AbsolutePosition,AbsolutePage閮戒笉鑳戒嬌鐢?BR> adOpenKeyset = 1, //閲囩敤榪欑鍏夋爣鐨勮褰曢泦鐪嬩笉鍒板叾瀹冪敤鎴風殑鏂板銆佸垹闄ゆ搷浣滐紝浣嗗浜庢洿鏂板師鏈夎褰曠殑鎿嶄綔瀵逛綘鏄彲瑙佺殑銆?BR> adOpenDynamic = 2, //鍔ㄦ佸厜鏍囥傛墍鏈夋暟鎹簱鐨勬搷浣滈兘浼氱珛鍗沖湪鍚勭敤鎴瘋褰曢泦涓婂弽搴斿嚭鏉ャ?BR> adOpenStatic = 3 //闈欐佸厜鏍囥傚畠涓轟綘鐨勮褰曢泦浜х敓涓涓潤鎬佸浠斤紝浣嗗叾瀹冪敤鎴風殑鏂板銆佸垹闄ゃ佹洿鏂版搷浣滃浣犵殑璁板綍闆嗘潵璇存槸涓嶅彲瑙佺殑銆?BR> }; 鈶ockType閿佸畾綾誨瀷錛屽畠鍙互鏄互涓嬪間箣涓錛岃鐪嬪涓嬫灇涓劇粨鏋勶細 enum LockTypeEnum { adLockUnspecified = -1, //鏈寚瀹?BR> adLockReadOnly = 1, //鍙璁板綍闆?BR> adLockPessimistic = 2, //鎮茶閿佸畾鏂瑰紡銆傛暟鎹湪鏇存柊鏃墮攣瀹氬叾瀹冩墍鏈夊姩浣滐紝榪欐槸鏈瀹夊叏鐨勯攣瀹氭満鍒?BR> adLockOptimistic = 3, //涔愯閿佸畾鏂瑰紡銆傚彧鏈夊湪浣犺皟鐢║pdate鏂規硶鏃舵墠閿佸畾璁板綍銆傚湪姝や箣鍓嶄粛鐒跺彲浠ュ仛鏁版嵁鐨勬洿鏂般佹彃鍏ャ佸垹闄ょ瓑鍔ㄤ綔 adLockBatchOptimistic = 4錛?//涔愯鍒嗘壒鏇存柊銆傜紪杈戞椂璁板綍涓嶄細閿佸畾錛屾洿鏀廣佹彃鍏ュ強鍒犻櫎鏄湪鎵瑰鐞嗘ā寮忎笅瀹屾垚銆?BR> }; 鈶ptions璇峰弬鑰冩湰鏂囦腑瀵笴onnection瀵硅薄鐨凟xecute鏂規硶鐨勪粙緇?BR> /***********************銆?銆戣褰曢泦鐨勯亶鍘嗐佹洿鏂?************************/ 鏍規嵁鎴戜滑鍒氭墠閫氳繃鎵цSQL鍛戒護寤虹珛濂界殑 瀛︾敓淇℃伅 琛紝瀹冨寘鍚洓涓瓧孌?瀛﹀彿錛屽鍚嶏紝騫撮緞錛岀敓鏃?BR>浠ヤ笅鐨勪唬鐮佸疄鐜幫細鎵撳紑璁板綍闆嗭紝閬嶅巻鎵鏈夎褰曪紝鍒犻櫎絎竴鏉¤褰曪紝娣誨姞涓夋潯璁板綍錛岀Щ鍔ㄥ厜鏍囧埌絎簩鏉?BR>璁板綍錛屾洿鏀瑰叾騫撮緞錛屼繚瀛樺埌鏁版嵁搴撱?BR> try { _variant_t vUsername,vBirthday,vID,vOld; _RecordsetPtr m_pRecordset; m_pRecordset.CreateInstance("ADODB.Recordset"); m_pRecordset->Open("SELECT * FROM 瀛︾敓淇℃伅",_variant_t((IDispatch*)m_pConnection,true),adOpenStatic,adLockOptimistic,adCmdText); while(!m_pRecordset->adoEOF) { vID = m_pRecordset->GetCollect(_variant_t((long)0)); //鍙栧緱絎?鍒楃殑鍊?浠?寮濮嬭鏁幫紝浣犱篃鍙互鐩存帴緇欏嚭鍒楃殑鍚嶇О錛屽涓嬩竴琛?BR> vUsername = m_pRecordset->GetCollect("濮撳悕"); //鍙栧緱濮撳悕瀛楁鐨勫?BR> vOld = m_pRecordset->GetCollect("騫撮緞"); vBirthday = m_pRecordset->GetCollect("鐢熸棩"); TRACE("id:%d,濮撳悕:%s,騫撮緞:%d,鐢熸棩:%s\r\n", vID.lVal, (LPCTSTR)(_bstr_t)vUsername, vOld.lVal, (LPCTSTR)(_bstr_t)vBirthday); //鍦―EBUG鏂瑰紡涓嬬殑OUTPUT紿楀彛杈撳嚭璁板綍闆嗕腑鐨勮褰?BR> m_pRecordset->MoveNext(); //縐誨埌涓嬩竴鏉¤褰?BR> } m_pRecordset->MoveFirst(); //縐誨埌棣栨潯璁板綍 m_pRecordset->Delete(adAffectCurrent); //鍒犻櫎褰撳墠璁板綍 for(int i=0;i<3;i++) //娣誨姞涓夋潯鏂拌褰曞茍璧嬪?BR> { m_pRecordset->AddNew(); //娣誨姞鏂拌褰?BR> m_pRecordset->PutCollect("瀛﹀彿",_variant_t((long)(i+10))); m_pRecordset->PutCollect("濮撳悕",_variant_t("鐜嬫枌騫?)); m_pRecordset->PutCollect("騫撮緞",_variant_t((long)21)); m_pRecordset->PutCollect("鐢熸棩",_variant_t("1930-3-15")); } m_pRecordset->Move(1,_variant_t((long)adBookmarkFirst)); //浠庣涓鏉¤褰曞線涓嬬Щ鍔ㄤ竴鏉¤褰?鍗崇Щ鍔ㄥ埌絎簩鏉¤褰曞 m_pRecordset->PutCollect(_variant_t("騫撮緞"),_variant_t((long)45)); //淇敼鍏跺勾榫?BR> m_pRecordset->Update(); //淇濆瓨鍒板簱涓?BR> } catch (_com_error e){} /***********************銆?銆戝叧闂褰曢泦涓庤繛鎺?*************************/ 璁板綍闆嗘垨榪炴帴閮藉彲浠ョ敤Close鏂規硶鏉ュ叧闂?nbsp; m_pRecordset->Close(); //鍏抽棴璁板綍闆?nbsp; m_pConnection->Close(); //鍏抽棴榪炴帴 鍦╯tdafx.h涓繘琛屽畯瀹氫箟: #if !defined CATCH_ERROR #define CATCH_ERROR \ { \ CString strComError; \ strComError.Format("閿欒緙栧彿: %08lx\n閿欒淇℃伅: %s\n閿欒婧? %s\n閿欒鎻忚堪: %s", \ e.Error(), \ e.ErrorMessage(), \ (LPCSTR) e.Source(), \ (LPCSTR) e.Description()); \ ::MessageBox(NULL,strComError,"閿欒",MB_ICONEXCLAMATION); \ } #endif 浣跨敤鏂規硶錛?BR>try { ...} catch(_com_error e) { CATCH_ERROR; } ]]> ADO鏁版嵁搴撶紪紼嬪叆闂?/title> http://m.shnenglu.com/ivenher/articles/1773.html鐖遍キ鐩?/dc:creator>鐖遍キ鐩?/author>Thu, 15 Dec 2005 03:03:00 GMT http://m.shnenglu.com/ivenher/articles/1773.html http://m.shnenglu.com/ivenher/comments/1773.html http://m.shnenglu.com/ivenher/articles/1773.html#Feedback 0 http://m.shnenglu.com/ivenher/comments/commentRss/1773.html http://m.shnenglu.com/ivenher/services/trackbacks/1773.html 涓銆佸湪VC++涓嬌鐢ˋDO緙栫▼ ADO瀹為檯涓婂氨鏄敱涓緇凙utomation瀵硅薄鏋勬垚鐨勭粍浠訛紝鍥犳鍙互璞′嬌鐢ㄥ叾瀹冧換浣旳utomation瀵硅薄涓鏍蜂嬌鐢ˋDO銆侫DO涓渶閲嶈鐨勫璞℃湁涓変釜錛欳onnection銆丆ommand鍜孯ecordset錛屽畠浠垎鍒〃紺鴻繛鎺ュ璞°佸懡浠ゅ璞″拰璁板綍闆嗗璞°傚鏋滄偍鐔熸倝浣跨敤MFC涓殑ODBC綾伙紙CDatabase銆丆Recordset)緙栫▼錛岄偅涔堝涔燗DO緙栫▼灝卞崄鍒嗗鏄撲簡銆?BR>浣跨敤ADO緙栫▼鏃跺彲浠ラ噰鐢ㄤ互涓嬩笁縐嶆柟娉曚箣涓錛?BR>1銆佷嬌鐢ㄩ澶勭悊鎸囦護#import #import "C:\Program Files\Common Files\System\ADO\msado15.dll" \ no_namespace rename("EOF", "EndOfFile") 浣嗚娉ㄦ剰涓嶈兘鏀懼湪stdAfx.h鏂囦歡鐨勫紑澶達紝鑰屽簲璇ユ斁鍦ㄦ墍鏈塱nclude鎸囦護鐨勫悗闈€傚惁鍒欏湪緙栬瘧鏃朵細鍑洪敊銆?BR>紼嬪簭鍦ㄧ紪璇戣繃紼嬩腑錛孷C++浼氳鍑簃sado15.dll涓殑綾誨瀷搴撲俊鎭紝鑷姩浜х敓涓や釜璇ョ被鍨嬪簱鐨勫ご鏂囦歡鍜屽疄鐜版枃浠秏sado15.tlh鍜宮sado15.tli錛堝湪鎮ㄧ殑Debug鎴朢elease鐩綍涓嬶級銆傚湪榪欎袱涓枃浠墮噷瀹氫箟浜咥DO鐨勬墍鏈夊璞″拰鏂規硶錛屼互鍙婁竴浜涙灇涓懼瀷鐨勫父閲忕瓑銆傛垜浠殑紼嬪簭鍙鐩存帴璋冪敤榪欎簺鏂規硶灝辮浜嗭紝涓庝嬌鐢∕FC涓殑COleDispatchDriver綾昏皟鐢ˋutomation瀵硅薄鍗佸垎綾諱技銆?BR>2銆佷嬌鐢∕FC涓殑CIDispatchDriver 灝辨槸閫氳繃璇誨彇msado15.dll涓殑綾誨瀷搴撲俊鎭紝寤虹珛涓涓狢OleDispatchDriver綾葷殑媧劇敓綾伙紝鐒跺悗閫氳繃瀹冭皟鐢ˋDO瀵硅薄銆?BR>3銆佺洿鎺ョ敤COM鎻愪緵鐨凙PI 濡備嬌鐢ㄥ涓嬩唬鐮侊細 CLSID clsid; HRESULT hr = ::CLSIDFromProgID(L"ADODB.Connection", &clsid); if(FAILED(hr)) {...} ::CoCreateInstance(clsid, NULL, CLSCTX_SERVER, IID_IDispatch, (void **) &pDispatch); if(FAILED(hr)) {...} 浠ヤ笂涓夌鏂規硶錛岀涓鍜岀浜岀綾諱技錛屽彲鑳界涓縐嶅ソ鐢ㄤ竴浜涳紝絎笁縐嶇紪紼嬪彲鑳芥渶楹葷儲銆備絾鍙兘絎笁縐嶆柟娉曚篃鏄晥鐜囨渶楂樼殑錛岀▼搴忕殑灝哄涔熸渶灝忥紝騫朵笖瀵笰DO鐨勬帶鍒惰兘鍔涗篃鏈寮恒?BR>鎹井杞祫鏂欎粙緇嶏紝絎竴縐嶆柟娉曚笉鏀寔鏂規硶璋冪敤涓殑榛樿鍙傛暟錛屽綋鐒剁浜岀鏂規硶涔熸槸榪欐牱錛屼絾絎笁縐嶅氨涓嶆槸榪欐牱浜嗐傞噰鐢ㄧ涓夌鏂規硶鐨勬按騫充篃鏈楂樸傚綋浣犻渶瑕佺粫榪嘇DO鑰岀洿鎺ヨ皟鐢∣LE DB搴曞眰鐨勬柟娉曟椂錛屽氨涓瀹氳浣跨敤絎笁縐嶆柟娉曚簡銆?BR>ADO緙栫▼鐨勫叧閿紝灝辨槸鐔熺粌鍦拌繍鐢ˋDO鎻愪緵鐨勫悇縐嶅璞?object)銆佹柟娉?method)銆佸睘鎬?property)鍜屽鍣紙collection錛夈傚彟澶栵紝濡傛灉鏄湪MS SQL鎴朞racle絳夊ぇ鍨嬫暟鎹簱涓婄紪紼嬶紝榪樿鑳界啛緇冧嬌鐢⊿QL璇█銆?BR>浜屻佷嬌鐢?import鏂規硶鐨勭紪紼嬫楠?BR>榪欓噷寤鴻鎮ㄤ嬌鐢?import鐨勬柟娉曪紝鍥犱負瀹冩槗瀛︺佹槗鐢紝浠g爜涔熸瘮杈冪畝媧併?BR>1銆?娣誨姞#import鎸囦護 鎵撳紑stdafx.h鏂囦歡錛屽皢涓嬪垪鍐呭娣誨姞鍒版墍鏈夌殑include鎸囦護涔嬪悗錛?BR>#include <icrsint.h> //Include support for VC++ Extensions #import "C:\Program Files\Common Files\System\ADO\msado15.dll" \ no_namespace rename("EOF", "adoEOF") 鍏朵腑icrsint.h鏂囦歡鍖呭惈浜哣C++鎵╁睍鐨勪竴浜涢澶勭悊鎸囦護銆佸畯絳夌殑瀹氫箟錛岀敤浜嶤OM緙栫▼鏃朵嬌鐢ㄣ?BR>2銆佸畾涔塤ConnectionPtr鍨嬪彉閲忥紝騫跺緩绔嬫暟鎹簱榪炴帴 寤虹珛浜嗕笌鏁版嵁搴撴湇鍔″櫒鐨勮繛鎺ュ悗錛屾墠鑳借繘琛屽叾浠栨湁鍏蟲暟鎹簱鐨勮闂拰鎿嶄綔銆侫DO浣跨敤Connection瀵硅薄鏉ュ緩绔嬩笌鏁版嵁搴撴湇鍔″櫒鐨勮繛鎺ワ紝鎵浠ュ畠鐩稿綋浜嶮FC涓殑CDatabase綾匯傚拰CDatabase綾諱竴鏍鳳紝璋冪敤Connection瀵硅薄鐨凮pen鏂規硶鍗沖彲寤虹珛涓庢湇鍔″櫒鐨勮繛鎺ャ?BR>鏁版嵁綾誨瀷 _ConnectionPtr瀹為檯涓婂氨鏄敱綾繪ā鏉縚com_ptr_t鑰屽緱鍒扮殑涓涓叿浣撶殑瀹炰緥綾伙紝鍏跺畾涔夊彲浠ュ埌msado15.tlh銆乧omdef.h 鍜宑omip.h榪欎笁涓枃浠朵腑鎵懼埌銆傚湪msado15.tlh涓湁錛?BR>_COM_SMARTPTR_TYPEDEF(_Collection, __uuidof(_Collection)); 緇忓畯鎵╁睍鍚庡氨寰楀埌浜哶ConnectionPtr綾匯俖ConnectionPtr綾誨皝瑁呬簡Connection瀵硅薄鐨処dispatch鎺ュ彛鎸囬拡錛屽強涓浜涘繀瑕佺殑鎿嶄綔銆傛垜浠氨鏄氳繃榪欎釜鎸囬拡鏉ユ搷綰礐onnection瀵硅薄銆傜被浼煎湴錛屽悗闈㈢敤鍒扮殑_CommandPtr鍜宊RecordsetPtr綾誨瀷涔熸槸榪欐牱寰楀埌鐨勶紝瀹冧滑鍒嗗埆琛ㄧず鍛戒護瀵硅薄鎸囬拡鍜岃褰曢泦瀵硅薄鐨勬寚閽堛?BR>錛?錛夈佽繛鎺ュ埌MS SQL Server 娉ㄦ剰榪炴帴瀛楃涓茬殑鏍煎紡錛屾彁渚涙紜殑榪炴帴瀛楃涓叉槸鎴愬姛榪炴帴鍒版暟鎹簱鏈嶅姟鍣ㄧ殑絎竴姝ワ紝鏈夊叧榪炴帴瀛楃涓茬殑璇︾粏淇℃伅鍙傝寰蔣MSDN Library鍏夌洏銆?BR>鏈緥榪炴帴瀛楃涓蹭腑鐨剆erver_name錛宒atabase_name錛寀ser_name鍜宲assword鍦ㄧ紪紼嬫椂閮藉簲璇ユ浛鎹㈡垚瀹為檯鐨勫唴瀹廣?BR> _ConnectionPtr pMyConnect=NULL; HRESULT hr=pMyConnect.CreateInstance(__uuidof(Connection))); if(FAILED(hr))return; _bstr_t strConnect="Provider=SQLOLEDB; Server=server_name;" "Database=database_name; uid=user_name; pwd=password;"; //connecting to the database server now: try{pMyConnect->Open(strConnect,"","",NULL);} catch (_com_error &e) { ::MessageBox(NULL,e.Description(),"璀﹀憡",MB_OK | MB_ICONWARNING); } 娉ㄦ剰Connection瀵硅薄鐨凮pen鏂規硶涓殑榪炴帴瀛楃涓插弬鏁板繀欏繪槸BSTR鎴朹bstr_t綾誨瀷銆傚彟澶栵紝鏈緥鏄洿鎺ラ氳繃OLE DB Provider寤虹珛榪炴帴錛屾墍浠ユ棤闇寤虹珛鏁版嵁婧愩?BR>錛?錛夈侀氳繃ODBC Driver榪炴帴鍒癉atabase Server 榪炴帴瀛楃涓叉牸寮忎笌鐩存帴鐢∣DBC緙栫▼鏃剁殑宸笉澶氾細 _bstr_t strConnect="DSN=datasource_name; Database=database_name; uid=user_name; pwd=password;"; 姝ゆ椂涓嶰DBC緙栫▼涓鏍鳳紝蹇呴』鍏堝緩绔嬫暟鎹簮銆?BR>3銆佸畾涔塤RecordsetPtr鍨嬪彉閲忥紝騫舵墦寮鏁版嵁闆?BR>瀹氫箟_RecordsetPtr鍨嬪彉閲忥紝鐒跺悗閫氳繃瀹冭皟鐢≧ecordset瀵硅薄鐨凮pen鏂規硶錛屽嵆鍙墦寮涓涓暟鎹泦銆傛墍浠ecordset瀵硅薄涓嶮FC涓殑CRecordset綾葷被浼鹼紝瀹冧篃鏈夊綋鍓嶈褰曘佸綋鍓嶈褰曟寚閽堢殑姒傚康銆傚錛?BR> _RecordsetPtr m_pRecordset; if(!FAILED(m_pRecordset.CreateInstance( __uuidof( Recordset ))) { m_pDoc->m_initialized=FALSE; return; } try{ m_pRecordset->Open(_variant_t("mytable"), _variant_t((IDispatch *)pMyConnect,true), adOpenKeyset, adLockOptimistic, adCmdTable); } catch (_com_error &e) { ::MessageBox(NULL,"鏃犳硶鎵撳紑mytable琛ㄣ?,"鎻愮ず", MB_OK | MB_ICONWARNING); } Recordset瀵硅薄鐨凮pen鏂規硶闈炲父閲嶈錛屽畠鐨勭涓涓弬鏁板彲浠ユ槸涓涓猄QL璇彞銆佷竴涓〃鐨勫悕瀛楁垨涓涓懡浠ゅ璞$瓑絳夛紱絎簩涓弬鏁板氨鏄墠闈㈠緩绔嬬殑榪炴帴瀵硅薄鐨勬寚閽堛傛澶栵紝鐢–onnection鍜孋ommand瀵硅薄鐨凟xecute鏂規硶涔熻兘寰楀埌璁板綍闆嗭紝浣嗘槸鍙鐨勩?BR>4銆佽鍙栧綋鍓嶈褰曠殑鏁版嵁 鎴戣涓鴻鍙栨暟鎹殑鏈鏂逛究鐨勬柟娉曞涓嬶細 try{ m_pRecordset->MoveFirst(); while(m_pRecordset->adoEOF==VARIANT_FALSE) { //Retrieve column's value: CString sName=(char*)(_bstr_t)(m_pRecordset->Fields->GetItem (_variant_t("name"))->Value); short cAge=(short)(m_pRecordset->Fields->GetItem (_variant_t("age"))->Value); //Do something what you want to do: ...... m_pRecordset->MoveNext(); } }//try catch (_com_error &e) { CString str=(char*)e.Description(); ::MessageBox(NULL,str+"\n鍙堝嚭姣涚梾浜嗐?,"鎻愮ず", MB_OK | MB_ICONWARNING); }
鏈緥涓殑name鍜宎ge閮芥槸瀛楁鍚嶏紝璇誨彇鐨勫瓧孌靛煎垎鍒繚瀛樺湪sName鍜宑Age鍙橀噺鍐呫備緥涓殑Fields鏄疪ecordset瀵硅薄鐨勫鍣紝GetItem鏂規硶榪斿洖鐨勬槸Field瀵硅薄錛岃孷alue鍒欐槸Field瀵硅薄鐨勪竴涓睘鎬э紙鍗寵瀛楁鐨勫鹼級銆傞氳繃姝や緥錛屽簲鎺屾彙鎿嶇旱瀵硅薄灞炴х殑鏂規硶銆備緥濡傦紝瑕佽幏寰桭ield 瀵硅薄鐨刅alue灞炴х殑鍊煎彲浠ョ洿鎺ョ敤灞炴у悕Value鏉ュ紩鐢ㄥ畠錛堝涓婁緥錛夛紝浣嗕篃鍙互璋冪敤Get鏂規硶錛屼緥濡傦細 CString sName=(char*)(_bstr_t)(m_pRecordset->Fields->GetItem (_variant_t("name"))->GetValue()); 浠庢渚嬭繕鍙互鐪嬪埌錛屽垽鏂槸鍚﹀埌杈捐褰曢泦鐨勬湯灝撅紝浣跨敤璁板綍闆嗙殑adoEOF灞炴э紝鍏跺艱嫢涓虹湡鍗沖埌浜嗙粨灝撅紝鍙嶄箣鍒欐湭鍒般傚垽鏂槸鍚﹀埌杈捐褰曢泦寮澶達紝鍒欏彲鐢˙OF灞炴с?BR>鍙﹀錛岃鍙栨暟鎹繕鏈変竴涓柟娉曪紝灝辨槸瀹氫箟涓涓粦瀹氱殑綾伙紝鐒跺悗閫氳繃緇戝畾鐨勫彉閲忓緱鍒板瓧孌靛鹼紙璇﹁鍚庨潰鐨勪粙緇嶏級銆?BR>5銆佷慨鏀規暟鎹?BR>鏂規硶涓錛?BR> try{ m_pRecordset->MoveFirst(); while(m_pRecordset->adoEOF==VARIANT_FALSE) { m_pRecordset->Fields->GetItem (_variant_t("濮撳悕"))->Value=_bstr_t("璧佃枃"); ...... m_pRecordset->Update();www.chinai tp 閲囧惂閲囧惂涓嶆槸緗?ow er.comJuJIe
m_pRecordset->MoveNext(); } }//try 鏀瑰彉浜哣alue灞炴х殑鍊鹼紝鍗蟲敼鍙樹簡瀛楁鐨勫箋?BR>鏂規硶浜岋細 m_pRecordset->Fields->GetItem (_variant_t("濮撳悕"))->PutValue(_bstr_t("璧佃枃")); 鏂規硶涓夛細灝辨槸鐢ㄥ畾涔夌粦瀹氱被鐨勬柟娉曪紙璇﹁鍚庨潰鐨勪粙緇嶏級銆?BR>6銆佹坊鍔犺褰?BR>鏂拌褰曟坊鍔犳垚鍔熷悗錛屽嵆鑷姩鎴愪負褰撳墠璁板綍銆侫ddNew鏂規硶鏈変袱縐嶅艦寮忥紝涓涓惈鏈夊弬鏁幫紝鑰屽彟涓涓垯涓嶅甫鍙傛暟銆?BR>鏂規硶涓錛堜笉甯﹀弬鏁幫級錛?BR> // Add new record into this table: try{ if(!m_pRecordset->Supports(adAddNew)) return;www.chinai tp 閲囧惂閲囧惂涓嶆槸緗?ow er.comJuJIe
m_pRecordset->AddNew(); m_pRecordset->Fields->GetItem (_variant_t("濮撳悕"))->Value=_bstr_t("璧佃枃"); m_pRecordset->Fields->GetItem (_variant_t("鎬у埆"))->Value=_bstr_t("濂?); m_pRecordset->Fields->GetItem (_variant_t("age"))->Value=_variant_t((short)20); m_pRecordset->Fields->GetItem (_variant_t("marry"))->Value=_bstr_t("鏈"); m_pRecordset->Update(); }//try catch (_com_error &e) { ::MessageBox(NULL, "鍙堝嚭姣涚梾浜嗐?,"鎻愮ず",MB_OK | MB_ICONWARNING); } 榪欑鏂規硶寮勫畬浜嗚繕瑕佽皟鐢║pdate()銆?BR>鏂規硶浜岋紙甯﹀弬鏁幫級錛?BR> _variant_t varName[4],narValue[4]; varName[0] = L"濮撳悕"; varName[1] = L"鎬у埆"; varName[2] = L"age"; varName[3] = L"marry"; narValue[0]=_bstr_t("璧佃枃"); narValue[1]=_bstr_t("濂?); narValue[2]=_variant_t((short)20); narValue[3]=_bstr_t("鏈");www.chinai tp 閲囧惂閲囧惂涓嶆槸緗?ow er.comJuJIe
const int nCrit = sizeof varName / sizeof varName[0]; // Create SafeArray Bounds and initialize the array SAFEARRAYBOUND rgsaName[1],rgsaValue[1]; rgsaName[0].lLbound = 0; rgsaName[0].cElements = nCrit; SAFEARRAY *psaName = SafeArrayCreate( VT_VARIANT, 1, rgsaName ); rgsaValue[0].lLbound = 0; rgsaValue[0].cElements = nCrit; SAFEARRAY *psaValue = SafeArrayCreate( VT_VARIANT, 1, rgsaValue ); // Set the values for each element of the array HRESULT hr1=S_OK.hr2=S_OK; for( long i = 0 ; i < nCrit && SUCCEEDED( hr1 ) && SUCCEEDED( hr2 );i++) { hr1=SafeArrayPutElement(psaName, &i,&varName[i]); hr2=SafeArrayPutElement(psaValue, &i,&narValue[i]); } // Initialize and fill the SafeArray VARIANT vsaName,vsaValue; vsaName.vt = VT_VARIANT | VT_ARRAY; vsaValue.vt = VT_VARIANT | VT_ARRAY; V_ARRAY(&vsaName) = psaName;//&vsaName->parray=psaName; //see definition in oleauto.h file. V_ARRAY(&vsaValue) = psaValue; // Add a new record: m_pRecordset->AddNew(vsaName,vsaValue); 榪欑鏂規硶涓嶉渶瑕佽皟鐢║pdate錛屽洜涓烘坊鍔犲悗錛孉DO浼氳嚜鍔ㄨ皟鐢ㄥ畠銆傛鏂規硶涓昏鏄嬌鐢⊿afeArray鎸洪夯鐑︺?BR>鏂規硶涓夛細灝辨槸鐢ㄥ畾涔夌粦瀹氱被鐨勬柟娉曪紙璇﹁鍚庨潰鐨勪粙緇嶏級銆?BR>7銆佸垹闄よ褰?BR>璋冪敤Recordset鐨凞elete鏂規硶灝辮浜嗭紝鍒犻櫎鐨勬槸褰撳墠璁板綍銆傝浜嗚ВDelete鐨勫叾瀹冪敤娉曡鏌ラ槄鍙傝冩枃鐚?BR> try{ m_pRecordset->MoveFirst(); while(m_pRecordset->adoEOF==VARIANT_FALSE) { CString sName=(char*)(_bstr_t)(m_pRecordset->Fields->GetItem (_variant_t("濮撳悕"))->Value); if(::MessageBox(NULL,"濮撳悕="+sName+"\n鍒犻櫎濂瑰悧錛?, "鎻愮ず",MB_YESNO | MB_ICONWARNING)==IDYES) { m_pRecordset->Delete(adAffectCurrent); m_pRecordset->Update(); } m_pRecordset->MoveNext(); } }//try catch (_com_error &e) { ::MessageBox(NULL,"鍙堝嚭姣涚梾浜嗐?,"鎻愮ず",MB_OK | MB_ICONWARNING); } 8銆佷嬌鐢ㄥ甫鍙傛暟鐨勫懡浠?BR>Command瀵硅薄鎵浠h〃鐨勫氨鏄竴涓狿rovider鑳藉鐞嗚В鐨勫懡浠わ紝濡係QL璇彞絳夈備嬌鐢–ommand瀵硅薄鐨勫叧閿氨鏄妸琛ㄧず鍛戒護鐨勮鍙ヨ緗埌CommandText灞炴т腑錛岀劧鍚庤皟鐢–ommand瀵硅薄鐨凟xecute鏂規硶灝辮浜嗐備竴鑸儏鍐典笅鍦ㄥ懡浠や腑鏃犻渶浣跨敤鍙傛暟錛屼絾鏈夋椂浣跨敤鍙傛暟錛屽彲浠ュ鍔犲叾鐏墊椿鎬у拰鏁堢巼銆?BR>(1). 寤虹珛榪炴帴銆佸懡浠ゅ璞″拰璁板綍闆嗗璞?BR>鏈緥涓〃紺哄懡浠ょ殑璇彞灝辨槸涓涓猄QL璇彞錛圫ELECT璇彞錛夈係ELECT璇彞涓殑闂彿?灝變唬琛ㄥ弬鏁幫紝濡傛灉瑕佸涓弬鏁幫紝灝卞鏀懼嚑涓棶鍙鳳紝姣忎釜闂彿浠h〃涓涓弬鏁般?BR>_ConnectionPtr Conn1; _CommandPtr Cmd1; ParametersPtr *Params1 = NULL; // Not an instance of a smart pointer. _ParameterPtr Param1; _RecordsetPtr Rs1;www.chinai tp 閲囧惂閲囧惂涓嶆槸緗?ow er.comJuJIe
try { // Create Connection Object (1.5 Version) Conn1.CreateInstance( __uuidof( Connection ) ); Conn1->ConnectionString = bstrConnect; Conn1->Open( bstrEmpty, bstrEmpty, bstrEmpty, -1 ); // Create Command Object Cmd1.CreateInstance( __uuidof( Command ) ); Cmd1->ActiveConnection = Conn1; Cmd1->CommandText = _bstr_t("SELECT * FROM mytable WHERE age< ?"); }//try 瑕佹敞鎰忓懡浠ゅ璞″繀欏諱笌榪炴帴瀵硅薄鍏寵仈璧鋒潵鎵嶈兘璧蜂綔鐢紝鏈緥涓皢鍛戒護瀵硅薄鐨凙ctiveConnection灞炴ц緗負榪炴帴瀵硅薄鐨勬寚閽堬紝鍗充負姝ょ洰鐨勶細 Cmd1->ActiveConnection = Conn1; (2). 鍒涘緩鍙傛暟瀵硅薄錛屽茍緇欏弬鏁拌祴鍊?BR>// Create Parameter Object Param1 = Cmd1->CreateParameter( _bstr_t(bstrEmpty), adInteger, adParamInput, -1, _variant_t( (long) 5) ); Param1->Value = _variant_t( (long) 5 ); Cmd1->Parameters->Append( Param1 ); 鐢ㄥ懡浠ゅ璞$殑鏂規硶鏉ュ垱寤轟竴涓弬鏁板璞★紝鍏朵腑鐨勯暱搴﹀弬鏁幫紙絎笁涓級濡傛灉鏄浐瀹氶暱搴︾殑綾誨瀷錛屽氨濉?1錛屽鏋滄槸瀛楃涓茬瓑鍙彉闀垮害鐨勫氨濉叾瀹為檯闀垮害銆侾arameters鏄懡浠ゅ璞$殑涓涓鍣紝瀹冪殑Append鏂規硶灝辨槸鎶婂垱寤虹殑鍙傛暟瀵硅薄榪藉姞鍒拌瀹瑰櫒閲屻侫ppend榪涘幓鐨勫弬鏁版寜鍏堝悗欏哄簭涓嶴QL璇彞涓殑闂彿浠庡乏鑷沖彸涓涓瀵瑰簲銆?BR>(3). 鎵ц鍛戒護鎵撳紑璁板綍闆?BR>// Open Recordset Object Rs1 = Cmd1->Execute( &vtEmpty, &vtEmpty2, adCmdText ); 浣嗚娉ㄦ剰錛岀敤Command鍜孋onnection瀵硅薄鐨凟xecute鏂規硶寰楀埌鐨凴ecordset鏄彧璇葷殑銆傚洜涓哄湪鎵撳紑Recordset涔嬪墠錛屾垜浠棤娉曡緗畠鐨凩ockType灞炴э紙鍏墮粯璁ゅ間負鍙錛夈傝屽湪鎵撳紑涔嬪悗璁劇疆LockType涓嶈搗浣滅敤銆?BR>鎴戝彂鐜扮敤涓婅堪鏂規硶寰楀埌璁板綍闆哛s1鍚庯紝涓嶄絾Rs1涓殑璁板綍鏃犳硶淇敼錛屽嵆浣跨洿鎺ョ敤SQL璇彞淇敼鍚屼竴琛ㄤ腑浠諱綍璁板綍閮戒笉琛屻?BR>瑕佹兂鑳戒慨鏀規暟鎹紝榪樻槸瑕佺敤Recordset鑷繁鐨凮pen鏂規硶鎵嶈錛屽錛?BR> try{ m_pRecordset->Open((IDispatch *) Cmd1, vtMissing, adOpenStatic, adLockOptimistic, adCmdUnspecified); } catch (_com_error &e) { ::MessageBox(NULL,"mytable琛ㄤ笉瀛樺湪銆?,"鎻愮ず",MB_OK | MB_ICONWARNING); } Recordset瀵硅薄鐨凮pen鏂規硶鐪熸槸澶ソ浜嗭紝鍏剁涓涓弬鏁板彲浠ユ槸SQL璇彞銆佽〃鍚嶅瓧銆佸懡浠ゅ璞℃寚閽堢瓑絳夈?BR>9銆佸搷搴擜DO鐨勯氱煡浜嬩歡 閫氱煡浜嬩歡灝辨槸褰撴煇涓壒瀹氫簨浠跺彂鐢熸椂錛岀敱Provider閫氱煡瀹㈡埛紼嬪簭錛屾崲鍙ヨ瘽璇達紝灝辨槸鐢盤rovider璋冪敤瀹㈡埛紼嬪簭涓殑涓涓壒瀹氱殑鏂規硶錛堝嵆浜嬩歡鐨勫鐞嗗嚱鏁幫級銆傛墍浠ヤ負浜嗗搷搴斾竴涓簨浠訛紝鏈鍏抽敭鐨勫氨鏄瀹炵幇浜嬩歡鐨勫鐞嗗嚱鏁般?BR>(1). 浠嶤onnectionEventsVt鎺ュ彛媧劇敓鍑轟竴涓被 涓轟簡鍝嶅簲_Connection鐨勯氱煡浜嬩歡錛屽簲璇ヤ粠ConnectionEventsVt鎺ュ彛媧劇敓鍑轟竴涓被錛?BR>class CConnEvent : public ConnectionEventsVt { private: ULONG m_cRef; public: CConnEvent() { m_cRef = 0; }; ~CConnEvent() {};www.chinai tp 閲囧惂閲囧惂涓嶆槸緗?ow er.comJuJIe
STDMETHODIMP QueryInterface(REFIID riid, void ** ppv); STDMETHODIMP_(ULONG) AddRef(void); STDMETHODIMP_(ULONG) Release(void); STDMETHODIMP raw_InfoMessage( struct Error *pError, EventStatusEnum *adStatus, struct _Connection *pConnection); STDMETHODIMP raw_BeginTransComplete( LONG TransactionLevel, struct Error *pError, EventStatusEnum *adStatus, struct _Connection *pConnection); ...... }; (2). 瀹炵幇姣忎竴涓簨浠剁殑澶勭悊鍑芥暟(鍑℃槸甯aw_鍓嶇紑鐨勬柟娉曢兘鎶婂畠瀹炵幇浜?錛?BR>STDMETHODIMP CConnEvent::raw_InfoMessage( struct Error *pError, EventStatusEnum *adStatus, struct _Connection *pConnection) { *adStatus = adStatusUnwantedEvent; return S_OK; };www.chinai tp 閲囧惂閲囧惂涓嶆槸緗?ow er.comJuJIe
鏈変簺鏂規硶铏界劧浣犲茍涓嶉渶瑕侊紝浣嗕篃蹇呴』瀹炵幇瀹冿紝鍙渶綆鍗曞湴榪斿洖涓涓猄_OK鍗沖彲銆備絾濡傛灉瑕侀伩鍏嶇粡甯歌璋冪敤錛岃繕搴斿湪鍏朵腑灝哸dStatus鍙傛暟璁劇疆涓篴dStatusUnwantedEvent錛屽垯鍦ㄦ湰嬈¤皟鐢ㄥ悗錛屼互鍚庡氨涓嶄細琚皟鐢ㄤ簡銆?BR>鍙﹀榪樺繀欏誨疄鐜癚ueryInterface, AddRef, 鍜孯elease涓変釜鏂規硶: STDMETHODIMP CConnEvent::QueryInterface(REFIID riid, void ** ppv) { *ppv = NULL; if (riid == __uuidof(IUnknown) || riid == __uuidof(ConnectionEventsVt)) *ppv = this; if (*ppv == NULL) return ResultFromScode(E_NOINTERFACE); AddRef(); return NOERROR; } STDMETHODIMP_(ULONG) CConnEvent::AddRef() { return ++m_cRef; }; STDMETHODIMP_(ULONG) CConnEvent::Release() { if (0 != --m_cRef) return m_cRef; delete this; return 0; } (3). 寮濮嬪搷搴旈氱煡浜嬩歡 // Start using the Connection events IConnectionPointContainer *pCPC = NULL; IConnectionPoint *pCP = NULL;www.chinai tp 閲囧惂閲囧惂涓嶆槸緗?ow er.comJuJIe
hr = pConn.CreateInstance(__uuidof(Connection)); if (FAILED(hr)) return;www.chinai tp 閲囧惂閲囧惂涓嶆槸緗?ow er.comJuJIe
hr = pConn->QueryInterface(__uuidof(IConnectionPointContainer), (void **)&pCPC); if (FAILED(hr)) return; hr = pCPC->FindConnectionPoint(__uuidof(ConnectionEvents), &pCP); pCPC->Release(); if (FAILED(hr)) return;www.chinai tp 閲囧惂閲囧惂涓嶆槸緗?ow er.comJuJIe
pConnEvent = new CConnEvent(); hr = pConnEvent->QueryInterface(__uuidof(IUnknown), (void **) &pUnk); if (FAILED(hr)) return rc; hr = pCP->Advise(pUnk, &dwConnEvt); pCP->Release(); if (FAILED(hr)) return;www.chinai tp 閲囧惂閲囧惂涓嶆槸緗?ow er.comJuJIe
pConn->Open("dsn=Pubs;", "sa", "", adConnectUnspecified); 涔熷氨鏄鍦ㄨ繛鎺?Open)涔嬪墠灝卞仛榪欎簺浜嬨?BR>(4). 鍋滄鍝嶅簲閫氱煡浜嬩歡 pConn->Close(); // Stop using the Connection events hr = pConn->QueryInterface(__uuidof(IConnectionPointContainer), (void **) &pCPC); if (FAILED(hr)) return; hr = pCPC->FindConnectionPoint(__uuidof(ConnectionEvents), &pCP); pCPC->Release(); if (FAILED(hr)) return rc; hr = pCP->Unadvise( dwConnEvt ); pCP->Release(); if (FAILED(hr)) return; 鍦ㄨ繛鎺ュ叧闂箣鍚庡仛榪欎歡浜嬨? 10銆侀偊瀹氭暟鎹?BR>瀹氫箟涓涓粦瀹氱被錛屽皢鍏舵垚鍛樺彉閲忕粦瀹氬埌涓涓寚瀹氱殑璁板綍闆嗭紝浠ユ柟渚夸簬璁塊棶璁板綍闆嗙殑瀛楁鍊箋?BR>(1). 浠嶤ADORecordBinding媧劇敓鍑轟竴涓被錛?BR>class CCustomRs : public CADORecordBinding { BEGIN_ADO_BINDING(CCustomRs) ADO_VARIABLE_LENGTH_ENTRY2(3, adVarChar, m_szau_fname, sizeof(m_szau_fname), lau_fnameStatus, false) ADO_VARIABLE_LENGTH_ENTRY2(2, adVarChar, m_szau_lname, sizeof(m_szau_lname), lau_lnameStatus, false) ADO_VARIABLE_LENGTH_ENTRY2(4, adVarChar, m_szphone, sizeof(m_szphone), lphoneStatus, true) END_ADO_BINDING()www.chinai tp 閲囧惂閲囧惂涓嶆槸緗?ow er.comJuJIe
public: CHAR m_szau_fname[22]; ULONG lau_fnameStatus; CHAR m_szau_lname[42]; ULONG lau_lnameStatus; CHAR m_szphone[14]; ULONG lphoneStatus; }; 鍏朵腑灝嗚緇戝畾鐨勫瓧孌典笌鍙橀噺鍚嶇敤BEGIN_ADO_BINDING瀹忓叧鑱旇搗鏉ャ傛瘡涓瓧孌靛搴斾簬涓や釜鍙橀噺錛屼竴涓瓨鏀懼瓧孌電殑鍊鹼紝鍙︿竴涓瓨鏀懼瓧孌電殑鐘舵併傚瓧孌電敤浠?寮濮嬬殑搴忓彿琛ㄧず錛屽1錛?錛?絳夌瓑銆?BR>鐗瑰埆瑕佹敞鎰忕殑鏄細濡傛灉瑕佺粦瀹氱殑瀛楁鏄瓧絎︿覆綾誨瀷錛屽垯瀵瑰簲鐨勫瓧絎︽暟緇勭殑鍏冪礌涓暟涓瀹氳姣斿瓧孌甸暱搴﹀ぇ2錛堟瘮濡俶_szau_fname[22]錛屽叾緇戝畾鐨勫瓧孌礱u_fname鐨勯暱搴﹀疄闄呮槸20錛夛紝涓嶈繖鏍風粦瀹氬氨浼氬け璐ャ傛垜鍒嗘瀽澶氬嚭鐨?鍙兘鏄負浜嗗瓨鏀懼瓧絎︿覆緇撳熬鐨勭┖瀛楃null鍜孊STR瀛楃涓插紑澶寸殑涓涓瓧錛堣〃紺築STR鐨勯暱搴︼級銆傝繖涓棶棰樺浜庡垵瀛﹁呮潵璇村彲鑳芥槸涓涓剰鎯充笉鍒扮殑闂銆?BR>CADORecordBinding綾葷殑瀹氫箟鍦╥crsint.h鏂囦歡閲岋紝鍐呭鏄細 class CADORecordBinding { public: STDMETHOD_(const ADO_BINDING_ENTRY*, GetADOBindingEntries) (VOID) PURE; };www.chinai tp 閲囧惂閲囧惂涓嶆槸緗?ow er.comJuJIe
BEGIN_ADO_BINDING瀹忕殑瀹氫箟涔熷湪icrsint.h鏂囦歡閲岋紝鍐呭鏄細 #define BEGIN_ADO_BINDING(cls) public: \ typedef cls ADORowClass; \ const ADO_BINDING_ENTRY* STDMETHODCALLTYPE GetADOBindingEntries() { \ static const ADO_BINDING_ENTRY rgADOBindingEntries[] = { www.chinai tp 閲囧惂閲囧惂涓嶆槸緗?ow er.comJuJIe
ADO_VARIABLE_LENGTH_ENTRY2瀹忕殑瀹氫箟涔熷湪icrsint.h鏂囦歡閲岋細 #define ADO_VARIABLE_LENGTH_ENTRY2(Ordinal, DataType, Buffer, Size, Status, Modify)\ {Ordinal, \ DataType, \ 0, \ 0, \ Size, \ offsetof(ADORowClass, Buffer), \ offsetof(ADORowClass, Status), \ 0, \ classoffset(CADORecordBinding, ADORowClass), \ Modify},www.chinai tp 閲囧惂閲囧惂涓嶆槸緗?ow er.comJuJIe
#define END_ADO_BINDING瀹忕殑瀹氫箟涔熷湪icrsint.h鏂囦歡閲岋細 #define END_ADO_BINDING() {0, adEmpty, 0, 0, 0, 0, 0, 0, 0, FALSE}};\ return rgADOBindingEntries;} (2). 緇戝畾 _RecordsetPtr Rs1; IADORecordBinding *picRs=NULL; CCustomRs rs; ...... Rs1->QueryInterface(__uuidof(IADORecordBinding), (LPVOID*)&picRs)); picRs->BindToRecordset(&rs); 媧劇敓鍑虹殑綾誨繀欏婚氳繃IADORecordBinding鎺ュ彛鎵嶈兘緇戝畾錛岃皟鐢ㄥ畠鐨凚indToRecordset鏂規硶灝辮浜嗐?BR>(3). rs涓殑鍙橀噺鍗蟲槸褰撳墠璁板綍瀛楁鐨勫?BR>//Set sort and filter condition: // Step 4: Manipulate the data Rs1->Fields->GetItem("au_lname")->Properties->GetItem("Optimize")->Value = true; Rs1->Sort = "au_lname ASC"; Rs1->Filter = "phone LIKE '415 5*'";www.chinai tp 閲囧惂閲囧惂涓嶆槸緗?ow er.comJuJIe
Rs1->MoveFirst(); while (VARIANT_FALSE == Rs1->EndOfFile) { printf("Name: %s\t %s\tPhone: %s\n", (rs.lau_fnameStatus == adFldOK ? rs.m_szau_fname : ""), (rs.lau_lnameStatus == adFldOK ? rs.m_szau_lname : ""), (rs.lphoneStatus == adFldOK ? rs.m_szphone : "")); if (rs.lphoneStatus == adFldOK) strcpy(rs.m_szphone, "777"); TESTHR(picRs->Update(&rs)); // Add change to the batch Rs1->MoveNext(); } Rs1->Filter = (long) adFilterNone; ...... if (picRs) picRs->Release(); Rs1->Close(); pConn->Close(); 鍙瀛楁鐨勭姸鎬佹槸adFldOK錛屽氨鍙互璁塊棶銆傚鏋滀慨鏀逛簡瀛楁錛屼笉瑕佸繕浜嗗厛璋冪敤picRs鐨刄pdate錛堟敞鎰忎笉鏄疪ecordset鐨刄pdate錛夛紝鐒跺悗鎵嶅叧闂紝涔熶笉瑕佸繕浜嗛噴鏀緋icRs錛堝嵆picRs->Release();錛夈?BR>(4). 姝ゆ椂榪樺彲浠ョ敤IADORecordBinding鎺ュ彛娣誨姞鏂扮邯褰?BR> if(FAILED(picRs->AddNew(&rs))) ...... 11. 璁塊棶闀挎暟鎹?BR>鍦∕icrosoft SQL涓殑闀挎暟鎹寘鎷瑃ext銆乮mage絳夎繖鏍烽暱綾誨瀷鐨勬暟鎹紝浣滀負浜岃繘鍒跺瓧鑺傛潵瀵瑰緟銆?BR>鍙互鐢‵ield瀵硅薄鐨凣etChunk鍜孉ppendChunk鏂規硶鏉ヨ闂傛瘡嬈″彲浠ヨ鍑烘垨鍐欏叆鍏ㄩ儴鏁版嵁鐨勪竴閮ㄥ垎錛屽畠浼氳浣忎笂嬈¤闂殑浣嶇疆銆備絾鏄鏋滀腑闂磋闂簡鍒殑瀛楁鍚庯紝灝卞張寰椾粠澶存潵浜嗐?BR>璇風湅涓嬮潰鐨勪緥瀛愶細 //鍐欏叆涓寮犵収鐗囧埌鏁版嵁搴擄細 VARIANT varChunk; SAFEARRAY *psa; SAFEARRAYBOUND rgsabound[1];www.chinai tp 閲囧惂閲囧惂涓嶆槸緗?ow er.comJuJIe
//VT_ARRAY | VT_UI1 CFile f("h:\\aaa.jpg",CFile::modeRead); BYTE bVal[ChunkSize+1]; UINT uIsRead=0; //Create a safe array to store the array of BYTES while(1) { uIsRead=f.Read(bVal,ChunkSize); if(uIsRead==0)break; rgsabound[0].cElements =uIsRead; rgsabound[0].lLbound = 0; psa = SafeArrayCreate(VT_UI1,1,rgsabound); for(long index=0;index<uIsRead;index++) { if(FAILED(SafeArrayPutElement(psa,&index,&bVal[index]))) ::MessageBox(NULL,"鍟婏紝鍙堝嚭姣涚梾浜嗐?,"鎻愮ず",MB_OK | MB_ICONWARNING); } varChunk.vt = VT_ARRAY|VT_UI1; varChunk.parray = psa; try{ m_pRecordset->Fields->GetItem("photo")->AppendChunk(varChunk); } catch (_com_error &e) { CString str=(char*)e.Description(); ::MessageBox(NULL,str+"\n鍙堝嚭姣涚梾浜嗐?,"鎻愮ず",MB_OK | MB_ICONWARNING); } ::VariantClear(&varChunk); ::SafeArrayDestroyData( psa); if(uIsRead<ChunkSize)break; }//while(1) f.Close();www.chinai tp 閲囧惂閲囧惂涓嶆槸緗?ow er.comJuJIe
//浠庢暟鎹簱璇諱竴寮犵収鐗囷細 CFile f; f.Open("h:\\bbb.jpg",CFile::modeWrite|CFile::modeCreate); long lPhotoSize = m_pRecordset->Fields->Item["photo"]->ActualSize; long lIsRead=0;www.chinai tp 閲囧惂閲囧惂涓嶆槸緗?ow er.comJuJIe
_variant_t varChunk; BYTE buf[ChunkSize]; while(lPhotoSize>0) { lIsRead=lPhotoSize>=ChunkSize? ChunkSize:lPhotoSize; varChunk = m_pRecordset->Fields-> Item["photo"]->GetChunk(lIsRead); for(long index=0;index<lIsRead;index++) { ::SafeArrayGetElement(varChunk.parray,&index,buf+index); } f.Write(buf,lIsRead); lPhotoSize-=lIsRead; }//while() f.Close(); 12. 浣跨敤SafeArray闂 瀛︿細浣跨敤SafeArray涔熸槸寰堥噸瑕佺殑錛屽洜涓哄湪ADO緙栫▼涓粡甯歌鐢ㄣ傚畠鐨勪富瑕佺洰鐨勬槸鐢ㄤ簬automation涓殑鏁扮粍鍨嬪弬鏁扮殑浼犻掋傚洜涓哄湪緗戠粶鐜涓紝鏁扮粍鏄笉鑳界洿鎺ヤ紶閫掔殑錛岃屽繀欏誨皢鍏跺寘瑁呮垚SafeArray銆傚疄璐ㄤ笂SafeArray灝辨槸灝嗛氬父鐨勬暟緇勫鍔犱竴涓弿榪扮錛岃鏄庡叾緇存暟銆侀暱搴︺佽竟鐣屻佸厓绱犵被鍨嬬瓑淇℃伅銆係afeArray涔熷茍涓嶅崟鐙嬌鐢紝鑰屾槸灝嗗叾鍐嶅寘瑁呭埌VARIANT綾誨瀷鐨勫彉閲忎腑錛岀劧鍚庢墠浣滀負鍙傛暟浼犻佸嚭鍘匯傚湪VARIANT鐨剉t鎴愬憳鐨勫煎鏋滃寘鍚玍T_ARRAY|...,閭d箞瀹冩墍灝佽鐨勫氨鏄竴涓猄afeArray錛屽畠鐨刾array鎴愬憳鍗蟲槸鎸囧悜SafeArray鐨勬寚閽堛係afeArray涓厓绱犵殑綾誨瀷鍙互鏄疺ARIANT鑳藉皝瑁呯殑浠諱綍綾誨瀷錛屽寘鎷琕ARIANT綾誨瀷鏈韓銆?nbsp; 浣跨敤SafeArray鐨勫叿浣撴楠わ細 鏂規硶涓錛?BR> 鍖呰涓涓猄afeArray錛?BR>(1). 瀹氫箟鍙橀噺錛屽錛?BR> VARIANT varChunk; SAFEARRAY *psa; SAFEARRAYBOUND rgsabound[1]; (2). 鍒涘緩SafeArray鎻忚堪絎︼細 uIsRead=f.Read(bVal,ChunkSize);//read array from a file. if(uIsRead==0)break; rgsabound[0].cElements =uIsRead; rgsabound[0].lLbound = 0; psa = SafeArrayCreate(VT_UI1,1,rgsabound); (3). 鏀劇疆鏁版嵁鍏冪礌鍒癝afeArray錛?BR> for(long index=0;index<uIsRead;index++) { if(FAILED(SafeArrayPutElement(psa,&index,&bVal[index]))) ::MessageBox(NULL,"鍑烘瘺鐥呬簡銆?,"鎻愮ず",MB_OK | MB_ICONWARNING); } 涓涓竴涓湴鏀撅紝鎸洪夯鐑︾殑銆?BR>(4). 灝佽鍒癡ARIANT鍐咃細 varChunk.vt = VT_ARRAY|VT_UI1; varChunk.parray = psa; 榪欐牱灝卞彲浠ュ皢varChunk浣滀負鍙傛暟浼犻佸嚭鍘諱簡銆?FONT color=#ffffcc>www.chinai tp 閲囧惂閲囧惂涓嶆槸緗?ow er.comJuJIe
璇誨彇SafeArray涓殑鏁版嵁鐨勬楠わ細 (1). 鐢⊿afeArrayGetElement涓涓竴涓湴璇?BR> BYTE buf[lIsRead]; for(long index=0;index<lIsRead;index++) { ::SafeArrayGetElement(varChunk.parray,&index,buf+index); } 灝辮鍒扮紦鍐插尯buf閲屼簡銆?BR>鏂規硶浜岋細 浣跨敤SafeArrayAccessData鐩存帴璇誨啓SafeArray鐨勭紦鍐插尯錛?BR>(1). 璇葷紦鍐插尯錛?BR> BYTE *buf; SafeArrayAccessData(varChunk.parray, (void **)&buf); f.Write(buf,lIsRead); SafeArrayUnaccessData(varChunk.parray); (2). 鍐欑紦鍐插尯錛?BR> BYTE *buf; ::SafeArrayAccessData(psa, (void **)&buf); for(long index=0;index<uIsRead;index++) { buf[index]=bVal[index]; } ::SafeArrayUnaccessData(psa);www.chinai tp 閲囧惂閲囧惂涓嶆槸緗?ow er.comJuJIe
varChunk.vt = VT_ARRAY|VT_UI1; varChunk.parray = psa;www.chinai tp 閲囧惂閲囧惂涓嶆槸緗?ow er.comJuJIe
榪欑鏂規硶璇誨啓SafeArray閮藉彲浠ワ紝瀹冪洿鎺ユ搷綰礢afeArray鐨勬暟鎹紦鍐插尯錛屾瘮鐢⊿afeArrayGetElement鍜孲afeArrayPutElement閫熷害蹇傜壒鍒傚悎浜庤鍙栨暟鎹備絾鐢ㄥ畬涔嬪悗涓嶈蹇樹簡璋冪敤::SafeArrayUnaccessData(psa)錛屽惁鍒欎細鍑洪敊鐨勩?BR>13. 浣跨敤涔︾( bookmark ) 涔︾鍙互鍞竴鏍囪瘑璁板綍闆嗕腑鐨勪竴涓褰曪紝鐢ㄤ簬蹇熷湴灝嗗綋鍓嶈褰曠Щ鍥炲埌宸茶闂繃鐨勮褰曪紝浠ュ強榪涜榪囨護絳夌瓑銆侾rovider浼氳嚜鍔ㄤ負璁板綍闆嗕腑鐨勬瘡涓鏉¤褰曚駭鐢熶竴涓功絳撅紝鎴戜滑鍙渶瑕佷嬌鐢ㄥ畠灝辮浜嗐傛垜浠笉鑳借瘯鍥炬樉紺恒佷慨鏀規垨姣旇緝涔︾銆侫DO鐢ㄨ褰曢泦鐨凚ookmark灞炴ц〃紺哄綋鍓嶈褰曠殑涔︾銆?BR>鐢ㄦ硶姝ラ錛?BR>(1). 寤虹珛涓涓猇ARIANT綾誨瀷鐨勫彉閲?BR>_variant_t VarBookmark; (2). 灝嗗綋鍓嶈褰曠殑涔︾鍊煎瓨鍏ヨ鍙橀噺 涔熷氨鏄褰曢泦鐨凚ookmark灞炴х殑褰撳墠鍊箋?BR> VarBookmark = rst->Bookmark; (3). 榪斿洖鍒板厛鍓嶇殑璁板綍 灝嗕繚瀛樼殑涔︾鍊艱緗埌璁板綍闆嗙殑涔︾灞炴т腑錛?BR> // Check for whether bookmark set for a record if (VarBookmark.vt == VT_EMPTY) printf("No Bookmark set!\n"); else rst->Bookmark = VarBookmark; 璁劇疆瀹屽悗錛屽綋鍓嶈褰曞嵆浼氱Щ鍔ㄥ埌璇ヤ功絳炬寚鍚戠殑璁板綍銆?BR>14銆佽緗繃婊ゆ潯浠?BR>Recordset瀵硅薄鐨凢ilter灞炴ц〃紺轟簡褰撳墠鐨勮繃婊ゆ潯浠躲傚畠鐨勫煎彲浠ユ槸浠ND鎴朞R榪炴帴璧鋒潵鐨勬潯浠惰〃杈懼紡錛堜笉鍚玏HERE鍏抽敭瀛楋級銆佺敱涔︾緇勬垚鐨勬暟緇勬垨ADO鎻愪緵鐨凢ilterGroupEnum鏋氫婦鍊箋備負Filter灞炴ц緗柊鍊煎悗Recordset鐨勫綋鍓嶈褰曟寚閽堜細鑷姩縐誨姩鍒版弧瓚寵繃婊ゆ潯浠剁殑絎竴涓褰曘備緥濡傦細 rst->Filter = _bstr_t ("濮撳悕='璧佃枃' AND 鎬у埆=鈥欏コ鈥?); 鍦ㄤ嬌鐢ㄦ潯浠惰〃杈懼紡鏃跺簲娉ㄦ剰涓嬪垪闂錛?BR>錛?錛夈佸彲浠ョ敤鍦嗘嫭鍙風粍鎴愬鏉傜殑琛ㄨ揪寮?BR>渚嬪錛?BR>rst->Filter = _bstr_t ("(濮撳悕='璧佃枃' AND 鎬у埆=鈥欏コ鈥? OR AGE<25"); 浣嗘槸寰蔣涓嶅厑璁稿湪鎷彿鍐呯敤OR錛岀劧鍚庡湪鎷彿澶栫敤AND錛屼緥濡傦細 rst->Filter = _bstr_t ("(濮撳悕='璧佃枃' OR 鎬у埆=鈥欏コ鈥? AND AGE<25"); 蹇呴』淇敼涓猴細 rst->Filter = _bstr_t ("(濮撳悕='璧佃枃' AND AGE<25) OR (鎬у埆=鈥欏コ鈥?nbsp; AND AGE<25)"); 錛?錛夈佽〃杈懼紡涓殑姣旇緝榪愮畻絎﹀彲浠ユ槸LIKE LIKE鍚庤姣旇緝鐨勬槸涓涓惈鏈夐氶厤絎?鐨勫瓧絎︿覆錛屾槦鍙瘋〃紺鴻嫢騫蹭釜浠繪剰鐨勫瓧絎︺?BR>瀛楃涓茬殑棣栭儴鍜屽熬閮ㄥ彲浠ュ悓鏃跺甫鏄熷彿* rst->Filter = _bstr_t ("濮撳悕 LIKE '*璧?' "); 涔熷彲浠ュ彧鏄熬閮ㄥ甫鏄熷彿錛?BR>rst->Filter = _bstr_t ("濮撳悕 LIKE '璧?' "); Filter灞炴у肩殑綾誨瀷鏄疺ariant錛屽鏋滆繃婊ゆ潯浠舵槸鐢變功絳劇粍鎴愮殑鏁扮粍錛屽垯闇灝嗚鏁扮粍杞崲涓篠afeArray錛岀劧鍚庡啀灝佽鍒頒竴涓猇ARIANT鎴朹variant_t鍨嬬殑鍙橀噺涓紝鍐嶈祴緇橣ilter灞炴с?BR>15銆佺儲寮曚笌鎺掑簭 錛?錛夈佸緩绔嬬儲寮?BR>褰撲互鏌愪釜瀛楁涓哄叧閿瓧鐢‵ind鏂規硶鏌ユ壘鏃訛紝涓轟簡鍔犲揩閫熷害鍙互浠ヨ瀛楁涓哄叧閿瓧鍦ㄨ褰曢泦鍐呴儴涓存椂寤虹珛绱㈠紩銆傚彧瑕佸皢璇ュ瓧孌電殑Optimize灞炴ц緗負true鍗沖彲錛屼緥濡傦細 pRst->Fields->GetItem("濮撳悕")->Properties-> GetItem("Optimize")->PutValue("True"); pRst->Find("濮撳悕 = '璧佃枃'",1,adSearchForward); ...... pRst->Fields->GetItem("濮撳悕")->Properties-> GetItem("Optimize")->PutValue("False"); pRst->Close(); 璇存槑錛歄ptimize灞炴ф槸鐢盤rovider鎻愪緵鐨勫睘鎬э紙鍦ˋDO涓О涓哄姩鎬佸睘鎬э級錛孉DO鏈韓娌℃湁姝ゅ睘鎬с?BR>錛?錛夈佹帓搴?BR>瑕佹帓搴忎篃寰堢畝鍗曪紝鍙鎶婅鎺掑簭鐨勫叧閿瓧鍒楄〃璁劇疆鍒癛ecordset瀵硅薄鐨凷ort灞炴ч噷鍗沖彲錛屼緥濡傦細 pRstAuthors->CursorLocation = adUseClient; pRstAuthors->Open("SELECT * FROM mytable", _variant_t((IDispatch *) pConnection), adOpenStatic, adLockReadOnly, adCmdText); ...... pRst->Sort = "濮撳悕 DESC, 騫撮緞 ASC"; 鍏抽敭瀛楋紙鍗沖瓧孌靛悕錛変箣闂寸敤閫楀彿闅斿紑錛屽鏋滆浠ユ煇鍏抽敭瀛楅檷搴忔帓搴忥紝鍒欏簲鍦ㄨ鍏抽敭瀛楀悗鍔犱竴絀烘牸錛屽啀鍔燚ESC錛堝涓婁緥錛夈傚崌搴忔椂ASC鍔犱笉鍔犳棤鎵璋撱傛湰鎿嶄綔鏄埄鐢ㄧ儲寮曡繘琛岀殑錛屽茍鏈繘琛岀墿鐞嗘帓搴忥紝鎵浠ユ晥鐜囪緝楂樸?BR>浣嗚娉ㄦ剰錛屽湪鎵撳紑璁板綍闆嗕箣鍓嶅繀欏誨皢璁板綍闆嗙殑CursorLocation灞炴ц緗負adUseClient錛屽涓婁緥鎵紺恒係ort灞炴у煎湪闇瑕佹椂闅忔椂鍙互淇敼銆?BR>16銆佷簨鍔″鐞?BR>ADO涓殑浜嬪姟澶勭悊涔熷緢綆鍗曪紝鍙渶鍒嗗埆鍦ㄩ傚綋鐨勪綅緗皟鐢–onnection瀵硅薄鐨勪笁涓柟娉曞嵆鍙紝榪欎笁涓柟娉曟槸錛?BR>錛?錛夈佸湪浜嬪姟寮濮嬫椂璋冪敤 pCnn->BeginTrans(); 錛?錛夈佸湪浜嬪姟緇撴潫騫舵垚鍔熸椂璋冪敤 pCnn->CommitTrans (); 錛?錛夈佸湪浜嬪姟緇撴潫騫跺け璐ユ椂璋冪敤 pCnn->RollbackTrans (); 鍦ㄤ嬌鐢ㄤ簨鍔″鐞嗘椂錛屽簲灝介噺鍑忓皬浜嬪姟鐨勮寖鍥達紝鍗沖噺灝忎粠浜嬪姟寮濮嬪埌緇撴潫錛堟彁浜ゆ垨鍥炴粴錛変箣闂寸殑鏃墮棿闂撮殧錛屼互渚挎彁楂樼郴緇熸晥鐜囥傞渶瑕佹椂涔熷彲鍦ㄨ皟鐢˙eginTrans()鏂規硶涔嬪墠錛屽厛璁劇疆Connection瀵硅薄鐨処solationLevel灞炴у鹼紝璇︾粏鍐呭鍙傝MSDN涓湁鍏矨DO鐨勬妧鏈祫鏂欍?BR>涓夈佷嬌鐢ˋDO緙栫▼甯歌闂瑙g瓟 浠ヤ笅鍧囨槸閽堝MS SQL 7.0緙栫▼鏃舵墍閬囬棶棰樿繘琛岃璁恒?BR>1銆佽繛鎺ュけ璐ュ彲鑳藉師鍥?BR>Enterprise Managemer鍐咃紝鎵撳紑灝嗘湇鍔″櫒鐨勫睘鎬у璇濇錛屽湪Security閫夐」鍗′腑錛屾湁涓涓夐」Authentication銆?BR>濡傛灉璇ラ夐」鏄疻indows NT only錛屽垯浣犵殑紼嬪簭鎵鐢ㄧ殑榪炴帴瀛楃涓插氨涓瀹氳鍖呭惈Trusted_Connection鍙傛暟錛屽茍涓斿叾鍊煎繀欏諱負yes錛屽錛?BR>"Provider=SQLOLEDB;Server=888;Trusted_Connection=yes" ";Database=master;uid=lad;"; 濡傛灉涓嶆寜涓婅堪鎿嶄綔錛岀▼搴忚繍琛屾椂榪炴帴蹇呯劧澶辮觸銆?BR>濡傛灉Authentication閫夐」鏄疭QL Server and Windows NT錛屽垯浣犵殑紼嬪簭鎵鐢ㄧ殑榪炴帴瀛楃涓插彲浠ヤ笉鍖呭惈Trusted_Connection鍙傛暟錛屽錛?BR>"Provider=SQLOLEDB;Server=888;Database=master;uid=lad;pwd=111;"; 鍥犱負ADO緇欒鍙傛暟鍙栫殑榛樿鍊煎氨鏄痭o錛屾墍浠ュ彲浠ョ渷鐣ャ傛垜璁や負榪樻槸鍙栭粯璁ゅ兼瘮杈冨畨鍏ㄤ竴浜涖?BR>2銆佹敼鍙樺綋鍓嶆暟鎹簱鐨勬柟娉?BR>浣跨敤Tansct-SQL涓殑USE璇彞鍗沖彲銆?BR>3銆佸浣曞垽鏂竴涓暟鎹簱鏄惁瀛樺湪 (1)銆佸彲鎵撳紑master鏁版嵁搴撲腑涓涓彨鍋歋CHEMATA鐨勮鍥撅紝鍏跺唴瀹瑰垪鍑轟簡璇ユ湇鍔″櫒涓婃墍鏈夌殑鏁版嵁搴撳悕縐般?BR>(2) 銆佹洿綆渚跨殑鏂規硶鏄嬌鐢║SE璇彞錛屾垚鍔熶簡灝卞瓨鍦紱涓嶆垚鍔燂紝灝變笉瀛樺湪銆備緥濡傦細 try{ m_pConnect->Execute ( _bstr_t("USE INSURANCE_2002"),NULL, adCmdText|adExecuteNoRecords ); } catch (_com_error &e) { blSuccess=FALSE; CString str="鏁版嵁搴揑NSURANCE_2002涓嶅瓨鍦紒\n"; str+=e.Description(); ::MessageBox(NULL,str,"璀﹀憡",MB_OK | MB_ICONWARNING); } 4銆佸垽鏂竴涓〃鏄惁瀛樺湪 錛?錛夈佸悓鏍峰垽鏂竴涓〃鏄惁瀛樺湪錛屼篃鍙互鐢ㄦ槸鍚︽垚鍔熷湴鎵撳紑瀹冩潵鍒ゆ柇錛屽崄鍒嗘柟渚匡紝渚嬪錛?BR> try{ m_pRecordset->Open(_variant_t("mytable"), _variant_t((IDispatch *)m_pConnection,true), adOpenKeyset, adLockOptimistic, adCmdTable); } catch (_com_error &e) { ::MessageBox(NULL,"璇ヨ〃涓嶅瓨鍦ㄣ?,"鎻愮ず",MB_OK | MB_ICONWARNING); }
(2)銆佽涓嶇劧鍙互閲囩敤楹葷儲涓鐐圭殑鍔炴硶錛屽氨鏄湪MS-SQL鏈嶅姟鍣ㄤ笂鐨勬瘡涓暟鎹簱涓兘鏈変竴涓悕涓簊ysobjects鐨勮〃錛屾煡鐪嬫琛ㄧ殑鍐呭鍗崇煡鎸囧畾鐨勮〃鏄惁鍦ㄨ鏁版嵁搴撲腑銆?BR>(3)銆佸悓鏍鳳紝姣忎釜鏁版嵁搴撲腑閮芥湁涓涓悕涓篢ABLES鐨勮鍥?View)錛屾煡鐪嬫瑙嗗浘鐨勫唴瀹瑰嵆鐭ユ寚瀹氱殑琛ㄦ槸鍚﹀湪璇ユ暟鎹簱涓?BR>5銆佺被鍨嬭漿鎹㈤棶棰?BR>錛?錛夈佺被鍨媀ARIANT_BOOL 綾誨瀷VARIANT_BOOL絳変環浜巗hort綾誨瀷銆俆he VARIANT_BOOL is equivalent to short. see it's definition below: typdef short VARIANT_BOOL 錛?錛夈乢com_ptr_t綾葷殑綾誨瀷杞崲 _ConnectionPtr鍙互鑷姩杞崲鎴怚Dspatch*綾誨瀷錛岃繖鏄洜涓篲ConnectionPtr瀹為檯涓婃槸_com_ptr_t綾葷殑涓涓疄渚嬶紝鑰岃繖涓被鏈夋綾誨瀷杞崲鍑芥暟銆?BR>鍚岀悊錛宊RecordsetPtr鍜宊CommandPtr涔熼兘鍙互榪欐牱杞崲銆?BR>錛?錛夈乢bstr_t鍜宊variant_t綾?BR>鍦ˋDO緙栫▼鏃訛紝_bstr_t鍜宊variant_t榪欎袱涓被寰堟湁鐢紝鐪佸幓浜嗚澶欱STR鍜孷ARIANT綾誨瀷杞崲鐨勯夯鐑︺?BR>6銆佹墦寮璁板綍闆嗘椂鐨勯棶棰?BR>鍦ㄦ墦寮璁板綍闆嗘椂錛屽湪璋冪敤Recordset鐨凮pen鏂規硶鏃訛紝鍏舵渶鍚庝竴涓弬鏁伴噷涓瀹氫笉鑳藉寘鍚玜dAsyncExecute錛屽惁鍒欏皢鍥犱負鏄紓姝ユ搷浣滐紝鍦ㄨ鍙栨暟鎹椂鏃犳硶璇誨埌鏁版嵁銆?BR>7銆佸紓甯稿鐞嗛棶棰?BR>瀵規墍鏈夎皟鐢ˋDO鐨勮鍙ヤ竴瀹氳鐢╰ry鍜宑atch璇彞鎹曟崏寮傚父錛屽惁鍒欏湪鍙戠敓寮傚父鏃訛紝紼嬪簭浼氬紓甯擱鍑恒?BR>8銆佷嬌鐢⊿afeArray闂 鍦ㄥ垵瀛︿嬌鐢ㄤ腑錛屾垜鏇鵑亣鍒頒竴涓激鑴戠瓔鐨勯棶棰橈紝涓瀹氳娉ㄦ剰錛?BR>鍦ㄥ畾涔変簡SAFEARRAY鐨勬寚閽堝悗錛屽鏋滄墦綆楅噸澶嶄嬌鐢ㄥ嬈★紝鍒欏湪涓棿鍙互璋冪敤::SafeArrayDestroyData閲婃斁鏁版嵁錛屼絾鍐充笉鑳借皟鐢?:SafeArrayDestroyDescriptor錛屽惁鍒欏繀鐒跺嚭閿欙紝鍗充嬌璋冪敤SafeArrayCreate涔熶笉琛屻備緥濡傦細 SAFEARRAY *psa; ...... //When the data are no longer to be used: ::SafeArrayDestroyData( psa); 鎴戝垎鏋愬湪瀹氫箟psa鎸囬拡鏃訛紝涓涓猄AFEARRAY鐨勫疄渚嬶紙涔熷氨鏄疭AFEARRAY鎻忚堪絎︼級涔熷悓鏃惰鑷姩寤虹珛浜嗐備絾鏄彧瑕佷竴璋冪敤::SafeArrayDestroyDescriptor錛屾弿榪扮灝辮閿姣佷簡銆?BR>鎵浠ユ垜璁や負::SafeArrayDestroyDescriptor鍙互鏍規湰灝變笉璋冪敤錛屽嵆浣胯皟鐢ㄤ篃蹇呴』鍦ㄦ渶鍚庤皟鐢ㄣ?BR>9銆侀噸澶嶄嬌鐢ㄥ懡浠ゅ璞¢棶棰?BR>涓涓懡浠ゅ璞″鏋滆閲嶅浣跨敤澶氭錛堝挨鍏舵槸甯﹀弬鏁扮殑鍛戒護錛夛紝鍒欏湪絎竴嬈℃墽琛屼箣鍓嶏紝搴斿皢瀹冪殑Prepared灞炴ц緗負TRUE銆傝繖鏍蜂細浣跨涓嬈℃墽琛屽噺鎱紝浣嗗嵈鍙互浣夸互鍚庣殑鎵ц鍏ㄩ儴鍔犲揩銆?BR>10銆佺粦瀹氬瓧絎︿覆鍨嬪瓧孌甸棶棰?BR>濡傛灉瑕佺粦瀹氱殑瀛楁鏄瓧絎︿覆綾誨瀷錛屽垯瀵瑰簲鐨勫瓧絎︽暟緇勭殑鍏冪礌涓暟涓瀹氳姣斿瓧孌甸暱搴﹀ぇ2錛堟瘮濡俶_szau_fname[22]錛屽叾緇戝畾鐨勫瓧孌礱u_fname鐨勯暱搴﹀疄闄呮槸20錛夛紝涓嶈繖鏍風粦瀹氬氨浼氬け璐ャ?BR>11銆佷嬌鐢ˋppendChunk鐨勯棶棰?BR>褰撶敤AddNew鏂規硶鍒氬垰鍚戣褰曢泦鍐呮坊鍔犱竴涓柊璁板綍涔嬪悗錛屼笉鑳介鍏堝悜涓涓暱鏁版嵁瀛楁錛坕mage綾誨瀷錛夊啓鍏ユ暟鎹紝蹇呴』鍏堝悜鍏朵粬瀛楁鍐欏叆榪囨暟鎹箣鍚庯紝鎵嶈兘璋冪敤AppendChunk鍐欒瀛楁錛屽惁鍒欏嚭閿欍備篃灝辨槸璇達紝AppendChunk涓嶈兘绱ф帴鍦ˋddNew涔嬪悗銆傚彟澶栵紝鍐欏叆鍏朵粬瀛楁鍚庤繕蹇呴』绱ф帴鐫璋冪敤AppendChunk錛岃屼笉鑳借皟鐢ㄨ褰曢泦鐨刄pdate鏂規硶鍚庯紝鎵嶈皟鐢ˋppendChunk錛屽惁鍒欒皟鐢ˋppendChunk鏃朵篃浼氬嚭閿欍傛崲鍙ヨ瘽璇達紝灝辨槸蹇呴』AppendChunk鍦ㄥ墠錛孶pdate鍦ㄥ悗銆傚洜鑰岃繖涓椂鍊欏氨涓嶈兘浣跨敤甯﹀弬鏁扮殑AddNew浜嗭紝鍥犱負甯﹀弬鏁扮殑AddNew浼氳嚜鍔ㄨ皟鐢ㄨ褰曢泦鐨刄pdate錛屾墍浠ppendChunk灝辮窇鍒癠pdate鐨勫悗闈簡錛屽氨鍙湁鍑洪敊浜嗭紒鍥犳錛岃繖鏃跺簲璇ョ敤涓嶅甫鍙傛暟鐨凙ddNew銆?BR>鎴戞帹嫻嬭繖鍙兘鏄疢S SQL 7.0鐨勯棶棰橈紝鍦∕S SQL 2000涓垯涓嶅瓨鍦ㄨ繖浜涢棶棰橈紝浣嗘槸AppendChunk浠嶇劧涓嶈兘鍦║pdate涔嬪悗銆?BR>鍥涖佸皬緇?BR>涓鑸儏鍐典笅錛孋onnection鍜孋ommand鐨凟xecute鐢ㄤ簬鎵ц涓嶄駭鐢熻褰曢泦鐨勫懡浠わ紝鑰孯ecordset鐨凮pen鐢ㄤ簬浜х敓涓涓褰曢泦錛屽綋鐒朵篃涓嶆槸緇濆鐨勩傜壒鍒獵ommand涓昏鏄敤浜庢墽琛屽弬鏁板寲鐨勫懡浠わ紝鍙互鐩存帴鐢盋ommand瀵硅薄鎵ц錛屼篃鍙互灝咰ommand瀵硅薄浼犻掔粰Recordset鐨凮pen銆?BR>鏈枃涓殑浠g爜鐗囨柇鍧囧湪VC++ 6.0銆乄indows NT 4.0 SP6鍜孧S SQL 7.0涓皟璇曢氳繃銆傜浉淇℃偍璇昏繃涔嬪悗錛岀紪鍐欑畝鍗曠殑鏁版嵁搴撶▼搴忓簲璇ユ病鏈夐棶棰樹簡銆傚綋鐒惰緙栧啓姣旇緝瀹炵敤鐨勩佸鏉備竴鐐圭殑紼嬪簭錛岃繕闇瑕佸OLE DB銆丄DO浠ュ強鏁版嵁搴撳鉤鍙板啀澶氫簡瑙d竴鐐癸紝甯屾湜鎮ㄧ戶緇姫鍔涳紝涓瀹氫細寰堝揩鎴愬姛鐨勶紒璇︾粏鍙傝冭祫鏂欒鍙傝寰蔣MSDN July 2000鍏夌洏鎴朚S SQL 7.0鍦ㄧ嚎鏂囨。璧勬枡錛圔ooks online錛夈傛枃涓毦鍏嶆湁閿欒鍜屼笉濡ヤ箣澶勶紝鏁鍚勪綅鎵硅瘎鎸囨錛?FONT color=#ffffcc>www.chinai tp 閲囧惂閲囧惂涓嶆槸緗?ow er.comJuJIe
鍙傝冩枃鐚細 1銆?寰蔣MSDN Library - July 2000 / Platform SDK / Data Services / Microsoft Data Access Components (MDAC) / Microsoft ActiveX Data Objects (ADO) 2銆?寰蔣MS SQL 7.0鍦ㄧ嚎鏂囨。璧勬枡錛圔ooks online錛?--- Building SQL Server Applications / ADO and SQL Server 3銆?寰蔣MS SQL 7.0鍦ㄧ嚎鏂囨。璧勬枡錛圔ooks online錛?--- Building SQL Server Applications / Transact 鈥?SQL Reference 4銆?寰蔣MSDN Library - July 2000 / Platform SDK / Data Services / Microsoft Data Access Components (MDAC) / Microsoft OLE DB
]]> VC鏁版嵁搴撶紪紼嬩腑鐨勬墦鍗版帶鍒?/title> http://m.shnenglu.com/ivenher/articles/1079.html鐖遍キ鐩?/dc:creator>鐖遍キ鐩?/author>Fri, 11 Nov 2005 06:31:00 GMT http://m.shnenglu.com/ivenher/articles/1079.html http://m.shnenglu.com/ivenher/comments/1079.html http://m.shnenglu.com/ivenher/articles/1079.html#Feedback 0 http://m.shnenglu.com/ivenher/comments/commentRss/1079.html http://m.shnenglu.com/ivenher/services/trackbacks/1079.html
VC鏁版嵁搴撶紪紼嬩腑鐨勬墦鍗版帶鍒?/TD>
2003-12-4 鍔犲叆 鏉ヨ嚜璧涜開緗?/FONT> 浣滆?FONT color=#00ff00>鏉庝綉姘?/FONT> 1 鏉¤瘎璁?nbsp; 鐐瑰嚮2287 嬈?/TD>
銆銆VC鏁版嵁搴撶紪紼嬩腑鐨勬墦鍗版帶鍒舵瘮杈冨鏉傦紝浣嗗畠涔熺粰紼嬪簭鍛樻渶澶х殑鐏墊椿鎬э紝鑰岃繖縐嶇伒媧繪ф鏄垜浠渶瑕佺殑銆傚洜涓哄悇琛屼笟銆侀儴闂ㄧ殑鎶ヨ〃涓鑸兘涓嶅お瑙勬暣錛岀壒鍒槸琛ㄥご閮ㄥ垎錛屼簩銆佷笁閲嶅祵濂楃殑鎯呭喌寰堝父瑙併備笅闈㈡垜浠氨寮鍙戜腑紕板埌鐨勪竴浜涢棶棰樹笌鍚岃浠帰璁ㄣ?nbsp; 銆銆Document/View妗嗘灦涔嬪鐨勬墦鍗?nbsp; 銆銆鐔熸倝VC鐨勭▼搴忓憳閮界煡閬揗icrosoft 鐨凙ppWizard鐢熸垚鐨勫簲鐢ㄧ▼搴忔鏋朵腑錛屽彲浠ラ夋嫨鍏嶈垂鐨勬墦鍗板強鎵撳嵃棰勮鍔熻兘錛屼絾鍓嶆彁鏄繀欏婚夋嫨Document/View緇撴瀯銆傜劧鑰屾垜浠殑鏁版嵁搴撳簲鐢ㄤ腑涓鑸兘涓嶉渶瑕佷竴涓枃。绫绘潵淇濆瓨鏂囨。锛屽洜湄撴暟鎹簱锛堟簮锛墳鏄垜浠殑鏂囨。锛屾暟鎹竴鑸槸鍦ㄤ竴涓璇濇鎴栬涓笌鐢ㄦ埛浜や簰錛岀紪杈戞垨淇敼緇撴灉鐩存帴閫氳繃鏁版嵁搴撳紩鎿庡啓鍥炴暟鎹簱涓傛垜浠殑紼嬪簭涓繪鏋惰涔堟槸鍩轟簬瀵硅瘽妗嗙殑銆佽涔堟槸鍩轟簬鏃犳枃。绫荤殑鍗曡锛堟垨澶氳锛壘l撴瀯錛屽湪榪欑鎯呭喌涓嬶紝AppWizard 鍦ㄦ墦鍗版帶鍒墮儴鍒嗗茍涓嶈兘緇欐垜浠換浣曞府鍔╋紝鍙兘鑷繁璐熻矗瀹屾垚鎵撳嵃鎺у埗銆?nbsp; 銆銆鎬葷粨璧鋒潵錛屼竴嬈℃墦鍗版搷浣滆閬靛驚浠ヤ笅姝ラ錛?nbsp; 銆銆1.寰楀埌鎴栫敓鎴愭墦鍗拌澶囧満鏅紝鍙氳繃鏄劇ず鎵撳嵃瀵硅瘽妗嗚鐢ㄦ埛閫夋嫨鎵撳嵃鏈轟笌綰稿紶絳夎緗紝涔熷彲鍦ㄧ▼搴忎腑鐩存帴鍙栫郴緇熺己鐪佹墦鍗版満璁劇疆錛岀劧鍚庢牴鎹姤琛ㄦ牸寮忚緗焊寮犲ぇ灝忓拰鎵撳嵃鏂瑰悜錛?nbsp; 銆銆2.寮濮嬪湪璇ヨ澶囧満鏅腑鐨勪竴嬈℃墦鍗頒綔涓氾紝瀹為檯鎵撳嵃鎶ヨ〃鍐呭錛岀粓姝㈡墦鍗頒綔涓氾紱 銆銆3.娓呴櫎鎵撳嵃璁懼鍦烘櫙錛屽畬鎴愭湰嬈℃墦鍗版搷浣溿?nbsp; 銆銆鍦ㄤ笅闈㈢殑渚嬪瓙涓紝鎴戜滑鍦ㄤ竴涓璇濇涓鐢ㄦ埛閫夋嫨鎵撳嵃鏌愪釜鎶ヨ〃錛屾病鏈夋樉紺烘墦鍗拌緗璇濇錛岃屾槸鐩存帴鍙栫郴緇熺己鐪佹墦鍗版満璁劇疆錛岀劧鍚庢牴鎹姤琛ㄦ牸寮忚緗焊寮犲ぇ灝忓拰鎵撳嵃鏂瑰悜銆備箣鎵浠ヨ繖鏍峰仛鏄洜涓哄悇琛屼笟銆侀儴闂ㄧ殑鎶ヨ〃鏍煎紡涓鑸兘鏄嚦涓婅屼笅鐨勭粺涓鏍煎紡銆傚嚱鏁癉oPreparePrintDC()銆丏oPrint()鍜孌oClearPrintDC()鍒嗗埆瀵瑰簲涓婅堪鐨勪笁涓楠わ細 銆銆BOOL CMyDialog::DoPreparePrintDC() 銆銆// 鍑嗗鎵撳嵃鍦烘櫙 銆銆{ 銆銆 錛僤efine銆銆FONTSIZE 14 銆銆 // 鑾峰彇鎵撳嵃鏈虹殑璁懼灞炴?nbsp; 銆銆 CPrintDialog dlgPrint( FALSE ); 銆銆 // 寰楀埌褰撳墠緋葷粺緙虹渷鎵撳嵃鏈鴻緗?nbsp; 銆銆 if(!dlgPrint.GetDefaults()) return FALSE; 銆銆 LPDEVMODE pDM=dlgPrint.GetDevMode(); 銆銆 if(pDM==NULL) return FALSE; 銆銆 ::GlobalUnlock(pDM); 銆銆 // 鑱旂粨鎵撳嵃DC錛宮鈥攈DC鏄畾涔変負HDC m鈥攈DC鐨勭被鎴愬憳鍙橀噺 銆銆 m鈥攈DC=dlgPrint.CreatePrinterDC(); 銆銆 // m鈥擠C鏄畾涔変負CDC m鈥擠C鐨勭被鎴愬憳鍙橀噺 銆銆 if(!m鈥擠C.Attach(m鈥攈DC) return FALSE; 銆銆 // 璁劇疆鎵撳嵃鏍囧織 銆銆 m鈥擠C.m鈥攂Printing=TRUE; 銆銆 short cxInch=m鈥擠C.GetDeviceCaps(LOGPIXELSX); 銆銆 short cyInch=m鈥擠C.GetDeviceCaps(LOGPIXELSY); 銆銆 // 寤虹珛鎵撳嵃瀛椾綋錛宮鈥攆ontPrint 鏄畾涔変負CFont m_fontPrint鐨勭被鎴愬憳鍙橀噺 銆銆 if(!m鈥攆ontPrint.CreateFont(MulDiv(FONTSIZE, 錛峜yInch, 72),0,0,0, FW鈥擭ORMAL,0,0,0, GB2312鈥擟HARSET, OUT鈥擟HARACTER鈥擯RECIS, CLIP鈥擟HARACTER鈥擯RECIS,DEFAULT鈥擰UALITY, DEFAULT鈥擯ITCH|FF鈥擠ONTCARE, HFONTNAME) 銆銆 return FALSE; 銆銆 return TRUE;} 銆銆void CDlgDataPrint::DoClearPrintDC() 銆銆// 娓呴櫎鎵撳嵃鍦烘櫙 銆銆{ m鈥攆ontPrint.DeleteObject(); 銆銆 m鈥擠C.Detach(); 銆銆 ::DeleteDC( m鈥攈DC );} 銆銆void CDlgDataPrint::DoPrint() 銆銆// 瀹為檯鎵撳嵃杈撳嚭 銆銆{ if(DoPreparePrintDC()==FALSE) return; 銆銆 // 寮濮嬩竴嬈℃墦鍗頒綔涓?nbsp; 銆銆 CString str; 銆銆 str.LoadString(AFX鈥擨DS鈥擜PP鈥擳ITLE); 銆銆 DOCINFO di; 銆銆 ::ZeroMemory (錛哾i, sizeof (DOCINFO)); 銆銆 di.cbSize=sizeof (DOCINFO); 銆銆 di.lpszDocName=str; 銆銆 m鈥擠C.StartDoc(錛哾i); 銆銆 m鈥擠C.StartPage(); 銆銆 // 灝嗘墦鍗板瓧浣撻夎繘璁懼鍦烘櫙 銆銆 CFont錛?nbsp;pOldFont=m鈥擠C.SelectObject(錛唌鈥攆ontPrint); 銆銆 // 杈撳嚭鎶ヨ〃錛屽緩璁敤CDC::DrawText()鍑芥暟渚夸簬鎺у埗鎵撳嵃鑼冨洿 銆銆 ... 銆銆 // 緇堟鎵撳嵃浣滀笟 銆銆 m鈥擠C.EndPage(); 銆銆 m鈥擠C.EndDoc(); 銆銆 m鈥擠C.SelectObject(pOldFont); 銆銆 // 娓呴櫎鎵撳嵃鍦烘櫙 銆銆 DoClearPrintDC();} 銆銆琛ㄦ牸闂 銆銆瀵規牸寮忓浐瀹氭垨琛ㄥご銆佽〃浣撴瘮杈冨鏉傜殑鎯呭喌錛岀壒鍒槸鏈夊祵濂楄〃鏍肩殑鎯呭喌涓嬶紝鎴戜滑璁や負鍏堝皢鎵撳嵃緇撴灉浠ユ枃鏈艦寮忓啓鍏ヤ竴涓存椂鏂囦歡錛岀劧鍚庡啀瀵規枃浠惰繘琛屾墦鍗拌緭鍑虹殑鏂規硶浼氫嬌浜嬫儏綆鍗曚竴浜涖傚洜涓鴻繖鏍峰湪紼嬪簭涓氨鍙互鍙叧蹇冩暟鎹?琛ㄤ綋)鐨勮緭鍑猴紝鑰岃〃澶村垯鍙互鍥哄畾鏍煎紡瀛樺叆鏁版嵁搴撱?nbsp; 銆銆浣嗘槸錛屾垜浠湪瀵規枃鏈艦寮忕殑鎶ヨ〃榪涜鎵撳嵃杈撳嚭鏃跺嵈鍙戠幇涓涓湁瓚g殑鐜拌薄錛屾湁鏃惰緭鍑虹粨鏋滅殑鐩擱偦涓よ琛ㄦ牸绔栫嚎涓嶈兘瀵歸綈錛岃屾湁鏃跺張鍙互銆傚師鏉ユ槸 Windows 鍥懼艦杈撳嚭鐨勯棶棰橈紝鍙鎴戜滑鍦ㄥ緩绔嬫墦鍗板瓧浣撴椂錛屽瓧浣撶殑楂樺害鏄伓鏁板氨鍙繚璇佺珫綰垮榻愶紝濡傛灉鏄鏁板垯涓嶈兘瀵歸綈銆傜煡閬撲簡鍘熷洜錛屽湪寤虹珛鎵撳嵃瀛椾綋鏃跺彧闇鍔犲叆濡備笅浠g爜鍗沖彲錛?nbsp; 銆銆... 銆銆錛僤efine銆銆FONTSIZE 14 銆銆錛僤efine銆銆HFONTNAME 鈥沖畫浣撯?nbsp; 銆銆// 寤虹珛鎵撳嵃瀛椾綋錛宮鈥攆ontPrint鏄畾涔変負CFont m鈥攆ontPrint鐨勭被鎴愬憳鍙橀噺 銆銆int nFontHeight=MulDiv(FONTSIZE,錛峜yInch, 72); 銆銆if(nFontHeight 錛?nbsp;2) nFontHeight錛嬶紜; 銆銆if(!m鈥攆ontPrint.CreateFont(nFontHeight, 0, 0, 0, FW鈥擭ORMAL, 0, 0,0,GB2312鈥擟HARSET, OUT鈥擟HARACTER鈥擯RECIS, CLIP鈥擟HARACTER鈥擯RECIS,DEFAULT鈥擰UALITY, DEFAULT鈥擯ITCH | FF鈥擠ONTCARE, HFONTNAME)) 銆銆 return FALSE; 銆銆... 銆銆榪樻湁涓鐐瑰皬鎶宸э紝杈撳嚭鏂囨湰褰㈠紡鐨勬姤琛ㄦ椂錛屽鎶ヨ〃鐨勬í綰垮彧闇瑕佽緭鍑哄叾姝e父楂樺害鐨勪簩鍒嗕箣涓鎴栦笁鍒嗕箣涓錛岃繖鏍鋒姤琛ㄧ湅璧鋒潵鏇寸揣鍑戠編瑙傘傝繖涔熸槸鎴戜滑鍦ㄥ墠闈㈠緩璁敤CDC::DrawText()榪涜緇樺埗杈撳嚭鐨勫師鍥犮?nbsp; ]]> ADO寮鍙戜腑濡備綍寰楀埌琛ㄦ牸瀛楁鍚?/title> http://m.shnenglu.com/ivenher/articles/1055.html鐖遍キ鐩?/dc:creator>鐖遍キ鐩?/author>Fri, 11 Nov 2005 03:09:00 GMT http://m.shnenglu.com/ivenher/articles/1055.html http://m.shnenglu.com/ivenher/comments/1055.html http://m.shnenglu.com/ivenher/articles/1055.html#Feedback 0 http://m.shnenglu.com/ivenher/comments/commentRss/1055.html http://m.shnenglu.com/ivenher/services/trackbacks/1055.html 1. 浠g爜璇存槑 (1)鍦?stdafx.h 鍔犲叆濡備笅浠g爜寮曞叆 ADO 搴撳畾涔?A target=_blank>鏂囦歡錛?PRE>#import "c:\program files\common files\system\ado\msado15.dll" no_namespace rename ("EOF", "adoEOF")
(2)鍒濆鍖朇OM搴擄紝鍦˙OOL CGetFieldNameApp::InitInstance()涓坊鍔燗fxOleInit();
(3)鍦ㄧ被 CgetFieldNameDlg 涓坊鍔犱袱涓敤浜庢墦寮鏁版嵁搴?/A>榪炴帴鍜屾墦寮璁板綍闆嗙殑鍙橀噺錛?PRE>_ConnectionPtr m_pConnection;
_RecordsetPtr m_pRecordset;
(4) 鍦–getFieldNameDlg鐨勬瀯閫犲嚱鏁頒腑娣誨姞 鏁版嵁搴?/A>榪炴帴鍜岃褰曢泦鍒濆鍖栦唬鐮侊紱m_pConnection.CreateInstance(__uuidof(Connection));
try
{
m_pConnection->Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\\FTI.mdb",
"",
"",
adModeUnknown
);
}
catch(_com_error e)
{
AfxMessageBox("鏁版嵁搴?/A>榪炴帴澶辮觸!");
}
m_pRecordset.CreateInstance(__uuidof(Recordset)); (5) 緇橪istbox鎺т歡娣誨姞鎺т歡鍙橀噺m_FieldsList錛?BR>(6) 鍦ㄦ寜閽殑鍗曞嚮浜嬩歡涓坊鍔犵浉搴斾唬鐮侊紱_bstr_t mStrSQL;
CString strColName;
BSTR bstrColName;
long ColCount,i;
Field * field = NULL;
HRESULT hr;
Fields * fields = NULL;
LPCTSTR nameField;
//鎵撳紑璁板綍闆嗭紝寰楀埌瀛楁鍚嶏紝騫跺皢瀛楁鍚嶄俊鎭坊鍔犲埌ListBox涓?
mStrSQL = "SELECT * FROM Images";
m_pRecordset->Open(mStrSQL,
m_pConnection.GetInterfacePtr(),
adOpenDynamic,
adLockOptimistic,
adCmdText);
hr = m_pRecordset->get_Fields (&fields); //寰楀埌璁板綍闆嗙殑瀛楁闆嗗拰
if(SUCCEEDED(hr))
fields->get_Count(&ColCount);
//寰楀埌璁板綍闆嗙殑瀛楁闆嗗悎涓殑瀛楁鐨勬諱釜鏁?
for(i=0;i<ColCount;i++)
{
fields->Item[i]->get_Name(&bstrColName); //寰楀埌璁板綍闆?/涓殑瀛楁鍚?
strColName=bstrColName;
nameField = strColName;
m_FieldsList.AddString(nameField);
}
if(SUCCEEDED(hr))
fields->Release();//閲婃斁鎸囬拡
]]> 鐢╱dl寤虹珛鍒皊ybase鐨勮繛鎺?/title> http://m.shnenglu.com/ivenher/articles/1012.html鐖遍キ鐩?/dc:creator>鐖遍キ鐩?/author>Wed, 09 Nov 2005 08:25:00 GMT http://m.shnenglu.com/ivenher/articles/1012.html http://m.shnenglu.com/ivenher/comments/1012.html http://m.shnenglu.com/ivenher/articles/1012.html#Feedback 0 http://m.shnenglu.com/ivenher/comments/commentRss/1012.html http://m.shnenglu.com/ivenher/services/trackbacks/1012.html 鏂板緩涓涓猽dl鏂囦歡銆傞夋嫨鎻愪緵紼嬪簭銆傚涓嬪浘 閫夋嫨涓嬩竴姝ャ?BR> 鏁版嵁婧愪負鍒╃敤 sybase ase ole Configuration Manager鎵寤虹珛鐨勬暟鎹簮銆?/P> ]]> Connection澶у叏 http://m.shnenglu.com/ivenher/articles/1008.html鐖遍キ鐩?/dc:creator>鐖遍キ鐩?/author>Wed, 09 Nov 2005 07:16:00 GMT http://m.shnenglu.com/ivenher/articles/1008.html http://m.shnenglu.com/ivenher/comments/1008.html http://m.shnenglu.com/ivenher/articles/1008.html#Feedback 0 http://m.shnenglu.com/ivenher/comments/commentRss/1008.html http://m.shnenglu.com/ivenher/services/trackbacks/1008.html 1.Sqlserver A.ODBC I.Standard Security: "Driver={SQL Server};Server=Aron1;Database=pubs;Uid=sa;Pwd=asdasd;" II.Trusted connection: "Driver={SQL Server};Server=Aron1;Database=pubs; Trusted_Connection=yes;" III.Prompt for username and password: oConn.Properties("Prompt") = adPromptAlways oConn.Open "Driver={SQL Server};Server=Aron1;DataBase=pubs;" B.OLE DB, OleDbConnection (.NET) I.Standard Security: "Provider=sqloledb;Data Source=Aron1;Initial Catalog=pubs;User Id=sa;Password=asdasd;" II.Trusted Connection: "Provider=sqloledb;Data Source=Aron1;Initial Catalog=pubs; Integrated Security=SSPI;" (浠呴傜敤浜嶴qlserver 2000) III.Prompt for username and password: oConn.Provider = "sqloledb" oConn.Properties("Prompt") = adPromptAlways oConn.Open "Data Source=Aron1;Initial Catalog=pubs;" IV.Connect via an IP address: "Provider=sqloledb;Data Source=190.190.200.100,1433;Network Library=DBMSSOCN;Initial Catalog=pubs;User ID=sa;Password=asdasd;" C.SqlConnection (.NET) I.Standard Security: "Data Source=Aron1;Initial Catalog=pubs;User Id=sa;Password=asdasd;" 鎴栬?Server=Aron1;Database=pubs;User ID=sa;Password=asdasd; Trusted_Connection=False" II.Trusted Connection: "Data Source=Aron1;Initial Catalog=pubs;Integrated Security=SSPI;" 鎴栬?Server=Aron1;Database=pubs;Trusted_Connection=True;" (浠呴傜敤浜嶴qlserver 2000) III.Connect via an IP address: "Data Source=190.190.200.100,1433;Network Library=DBMSSOCN;Initial Catalog=pubs;User ID=sa;Password=asdasd;" Name Network library dbnmpntw Win32 Named Pipes dbmssocn Win32 Winsock TCP/IP dbmsspxn Win32 SPX/IPX dbmsvinn Win32 Banyan Vines dbmsrpcn Win32 Multi-Protocol (Windows RPC) 閫氳繃SQLOLEDB provider 榪炴帴錛岀敤Network Library=dbmssocn錛岄氳繃MSDASQL provider榪炴帴錛岀敤Network=dbmssocn IV.澹版槑鏂規硶錛? C#: using System.Data.SqlClient; SqlConnection oSQLConn = new SqlConnection(); oSQLConn.ConnectionString="my connectionstring"; oSQLConn.Open(); VB.NET: Imports System.Data.SqlClient Dim oSQLConn As SqlConnection = New SqlConnection() oSQLConn.ConnectionString="my connectionstring" oSQLConn.Open() D.Data Shape MS Data Shape "Provider=MSDataShape;Data Provider=SQLOLEDB;Data Source=Aron1;Initial Catalog=pubs;User ID=sa;Password=asdasd;" 鍛靛懙錛孌ata Shape娌$敤榪囷紝璇峰弬鐓? http://www.4guysfromrolla.com/webtech/092599-1.shtml 2.Access A.ODBC I.Standard Security: "Driver={Microsoft Access Driver (*.mdb)};Dbq=C:\mydatabase.mdb; Uid=Admin;Pwd=;" II.Workgroup: "Driver={Microsoft Access Driver (*.mdb)};Dbq=C:\mydatabase.mdb; SystemDB=C:\mydatabase.mdw;" III.Exclusive: "Driver={Microsoft Access Driver (*.mdb)};Dbq=C:\mydatabase.mdb; Exclusive=1;Uid=admin;Pwd=" B.OLE DB, OleDbConnection (.NET) I.Standard security: "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=\somepath\mydb.mdb; User Id=admin;Password=;" II.Workgroup (system database): "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=\somepath\mydb.mdb; Jet OLEDB:System Database=system.mdw;" III.With password: "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=\somepath\mydb.mdb; Jet OLEDB:Database Password=MyDbPassword;" 3.Oracle A.ODBC I.New version: "Driver={Microsoft ODBC for Oracle};Server=OracleServer.world; Uid=Username;Pwd=asdasd;" II.Old version: "Driver={Microsoft ODBC Driver for Oracle};ConnectString= OracleServer.world;Uid=myUsername;Pwd=myPassword;" B.OLE DB, OleDbConnection (.NET) I.Standard security: "Provider=msdaora;Data Source=MyOracleDB;User Id=UserName; Password=asdasd;" 娉細涓婇潰鏄敤MS鐨勯┍鍔紝涓嬮潰鏄敤Oracle鎻愪緵鐨勯┍鍔細 "Provider=OraOLEDB.Oracle;Data Source=MyOracleDB;User Id=Username;Password=asdasd;" II.Trusted Connection: "Provider=OraOLEDB.Oracle;Data Source=MyOracleDB;OSAuthent=1;" C.OracleConnection (.NET) I.Standard: "Data Source=Oracle8i;Integrated Security=yes"; 娉細姝ゅ啓娉曠敤浜嶰racle 8i release 3鍙婁互涓婄増鏈? 澹版槑鏂規硶: C#: using System.Data.OracleClient; OracleConnection oOracleConn = new OracleConnection(); oOracleConn.ConnectionString = "my connectionstring"; oOracleConn.Open(); VB.NET: Imports System.Data.OracleClient Dim oOracleConn As OracleConnection = New OracleConnection() oOracleConn.ConnectionString = "my connectionstring" oOracleConn.Open() D.Data Shape I.MS Data Shape: "Provider=MSDataShape.1;Persist Security Info=False;Data Provider=MSDAORA;Data Source=orac;user id=username;password=mypw" 3.MySQL A.ODBC I.Local database: "Driver={mySQL};Server=mySrvName;Option=16834;Database=mydatabase;" II.Remote database: "Driver={mySQL};Server=data.domain.com;Port=3306;Option=131072; Stmt=;Database=my-database;Uid=username;Pwd=password;" B.OLE DB, OleDbConnection (.NET) I.Standard: "Provider=MySQLProv;Data Source=mydb;User Id=UserName; Password=asdasd;" C.MySqlConnection (.NET) I.eInfoDesigns.dbProvider: "Data Source=server;Database=mydb;User ID=username; Password=pwd;Command Logging=false" 娉細姝ゅ啓娉曚粎鐢ㄤ簬閫氳繃eInfoDesigns dbProvider榪炴帴錛? II.澹版槑鏂規硶錛? C#: using eInfoDesigns.dbProvider.MySqlClient; MySqlConnection oMySqlConn = new MySqlConnection(); oMySqlConn.ConnectionString = "my connectionstring"; oMySqlConn.Open(); VB.NET: Imports eInfoDesigns.dbProvider.MySqlClient Dim oMySqlConn As MySqlConnection = New MySqlConnection() oMySqlConn.ConnectionString = "my connectionstring" oMySqlConn.Open() 4.Interbase A.ODBC (Easysoft ODBC-Interbase driver ) I.Local computer: "Driver={Easysoft IB6 ODBC};Server=localhost;Database=localhost: C:\mydatabase.gdb;Uid=username;Pwd=password" II.Remote Computer: "Driver={Easysoft IB6 ODBC};Server=ComputerName;Database=ComputerName :C:\mydatabase.gdb;Uid=username;Pwd=password" B.ODBC (Intersolv ODBC-Interbase driver ) I.Local computer: "Driver={INTERSOLV InterBase ODBC Driver (*.gdb)};Server=localhost; Database=localhost:C:\mydatabase.gdb;Uid=username;Pwd=password" II.Remote Computer: "Driver={INTERSOLV InterBase ODBC Driver (*.gdb)}; Server=ComputerName;Database=ComputerName:C:\mydatabase.gdb; Uid=username;Pwd=password" C.OLE DB (SIBPROvider Driver) I.Standard: "provider=sibprovider;location=localhost:;data source=c: \databases\gdbs\mygdb.gdb;user id=SYSDBA;password=masterkey" II.Specifying character set: "provider=sibprovider;location=localhost:;data source=c: \databases\gdbs\mygdb.gdb;user id=SYSDBA;password=masterkey; character set=ISO8859_1" III.Specifying role: "provider=sibprovider;location=localhost:;data source=c: \databases\gdbs\mygdb.gdb;user id=SYSDBA;password=masterkey; role=DIGITADORES" 6.IBM DB2 A.OLE DB, OleDbConnection (.NET) from ms I.TCP/IP: "Provider=DB2OLEDB;Network Transport Library=TCPIP;Network Address=XXX.XXX.XXX.XXX;Initial Catalog=MyCtlg;Package Collection=MyPkgCol;Default Schema=Schema;User ID=MyUser;Password=MyPW" II.APPC: "Provider=DB2OLEDB;APPC Local LU Alias=MyAlias;APPC Remote LU Alias=MyRemote;Initial Catalog=MyCtlg;Package Collection=MyPkgCol;Default Schema=Schema;User ID=MyUser;Password=MyPW" 7.Sybase A.ODBC I.Standard Sybase System 12 (or 12.5) Enterprise Open Client: "Driver={SYBASE ASE ODBC Driver};Srvr=Aron1;Uid=username;Pwd=password" II.Standard Sybase System 11: "Driver={SYBASE SYSTEM 11};Srvr=Aron1;Uid=username;Pwd=password;" III.Intersolv 3.10: "Driver={INTERSOLV 3.10 32-BIT Sybase};Srvr=Aron1;Uid=username; Pwd=password;" IIII.Sybase SQL Anywhere (former Watcom SQL ODBC driver): "ODBC; Driver=Sybase SQL Anywhere 5.0; DefaultDir=c:\dbfolder\;Dbf= c:\mydatabase.db;Uid=username;Pwd=password;Dsn=""""" B.OLEDB I.Adaptive Server Anywhere (ASA): "Provider=ASAProv;Data source=myASA" II.Adaptive Server Enterprise (ASE) with Data Source .IDS file: "Provider=Sybase ASE OLE DB Provider; Data source=myASE" 娉細蹇呴』鍏堢敤Data Administrator鍒涘緩Data Source .IDS file III.Adaptive Server Enterprise (ASE): "Provider=Sybase.ASEOLEDBProvider;Srvr=myASEserver,5000;Catalog=myDBname; User Id=username;Password=password" 8.Informix A.ODBC I.Informix 3.30: "Dsn=鈥欌?Driver={INFORMIX 3.30 32 BIT};Host=hostname;Server=myserver;Service= service-name;Protocol=olsoctcp;Database=mydb;UID=username;PWD=myPwd II.Informix-CLI 2.5: "Driver={Informix-CLI 2.5 (32 Bit)};Server=myserver;Database=mydb; Uid=username;Pwd=myPwd" B.OLE DB I.IBM Informix OLE DB Provider: "Provider=Ifxoledbc.2;password=myPw;User ID=myUser;Data Source= dbName@serverName;Persist Security Info=true" 9.Mimer SQL A.ODBC I.Standard Security: "Driver={MIMER};Database=mydb;Uid=myuser;Pwd=mypw;" II. Prompt for username and password: "Driver={MIMER};Database=mydb;" 10.DSN A.ODBC I.DSN: "DSN=myDsn;Uid=username;Pwd=;" II.File DSN: "FILEDSN=c:\myData.dsn;Uid=username;Pwd=;" 11.Excel A.ODBC I.Standard: "Driver={Microsoft Excel Driver (*.xls)};DriverId=790; Dbq=C:\MyExcel.xls;DefaultDir=c:\mypath;" B.OLE DB I.Standard: "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\MyExcel.xls;Extended Properties=""Excel 8.0;HDR=Yes;IMEX=1""" "HDR=Yes;" indicates that the first row contains columnnames, not data. "IMEX=1;" tells the driver to always read "intermixed" data columns as text. 12.Text A.ODBC I.Standard: "Driver={Microsoft Text Driver (*.txt; *.csv)}; Dbq=c:\txtFilesFolder\;Extensions=asc,csv,tab,txt;" B.OLE DB I.Standard: "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\txtFilesFolder\;Extended Properties=""text;HDR=Yes;FMT=Delimited""" "HDR=Yes;" indicates that the first row contains columnnames, not data. 13.DBF / FoxPro A.ODBC I.standard: "Driver={Microsoft dBASE Driver (*.dbf)};DriverID=277;Dbq=c:\mydbpath;" B.OLE DB, OleDbConnection (.NET) I.standard: "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\folder;Extended Properties= dBASE IV;User ID=Admin;Password=" 14.Visual FoxPro A.OLE DB, OleDbConnection (.NET) I.Database container (.DBC): "Provider=vfpoledb.1;Data Source=C:\MyDbFolder\MyDbContainer.dbc; Password=MyPassWord;Collating Sequence=machine" II. Free table directory: "Provider=vfpoledb.1;Data Source=C:\MyDataDirectory\;Password=MyPassWord; Collating Sequence=general" B.ODBC I.Database container (.DBC): "Driver={Microsoft Visual FoxPro Driver};SourceType=DBC;SourceDB= c:\myvfpdb.dbc;Exclusive=No;Collate=Machine;" II.Free Table directory: "Driver={Microsoft Visual FoxPro Driver};SourceType=DBF;SourceDB= c:\myvfpdbfolder;Exclusive=No;Collate=Machine;" 15.Pervasive (娌″惉璇磋繃榪欎釜涓滀笢) A.ODBC I.Standard: "Driver={Pervasive ODBC Client Interface};ServerName=srvname;dbq=@dbname" B.OLE DB I.Standard: "Provider=PervasiveOLEDB;Data Source=C:\path" 16.UDL "File Name=c:\myDataLink.udl;" ]]> 鍒╃敤UDL鏂囦歡鏉ュ緩绔婣DO榪炴帴 http://m.shnenglu.com/ivenher/articles/1007.html鐖遍キ鐩?/dc:creator>鐖遍キ鐩?/author>Wed, 09 Nov 2005 07:04:00 GMT http://m.shnenglu.com/ivenher/articles/1007.html http://m.shnenglu.com/ivenher/comments/1007.html http://m.shnenglu.com/ivenher/articles/1007.html#Feedback 0 http://m.shnenglu.com/ivenher/comments/commentRss/1007.html http://m.shnenglu.com/ivenher/services/trackbacks/1007.html
浣跨敤閫氱敤鏁版嵁榪炴帴鏂囦歡錛?.UDL錛屼互涓嬬畝縐版枃浠訛級鏉ュ垱寤篈DO榪炴帴錛屽彲浠ュ拰ODBC涓鏍峰彲瑙嗗寲鍦板畾涔夎榪炴帴鐨勬暟鎹簮錛屼粠鑰屽疄鐜版暟鎹闂殑閫忔槑鎬с? 銆銆 1.浣跨敤UDL鏂囦歡鏉ュ垱寤篈DO榪炴帴 銆銆 鍒涘緩ADO鐨勮繛鎺ワ紝棣栧厛瑕佽緗瓵DO榪炴帴瀵硅薄鐨凜onnectionString灞炴э紝璇ュ睘鎬ф彁渚涙墍瑕佽繛鎺ョ殑鏁版嵁搴撶被鍨嬨佹暟鎹墍澶勬湇鍔″櫒銆佽璁塊棶鐨勬暟鎹簱鍜屾暟鎹簱璁塊棶鐨勫畨鍏ㄨ璇佷俊鎭傛瘮杈冧笓涓氱殑鏂規硶鏄湪ConnectionString涓洿鎺ユ彁渚涗互涓婁俊鎭紝涓嬮潰鏄闂笉鍚岀被鍨嬫暟鎹簮璁劇疆ConnectionString鐨勬爣鍑嗭細 璁塊棶ODBC鏁版嵁 "Provider=MSDASQL;DSN=dsnName;UID=userName;PWD=userPassword;" 璁塊棶ORACLE鏁版嵁搴? "Provider=MSDAORA;Data Source=serverName;User ID=userName; Password=userPassword;" 璁塊棶MS SQL鏁版嵁搴? "Provider=SQLOLEDB;Data Source=serverName;Initial Catalog=databaseName; User ID=userName;Password=userPassword;" 璁塊棶ACCESS 鏁版嵁搴? "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=databaseName;User ID=userName;Password=userPassword;" 銆銆 涓婅堪鐨勮繛鎺ュ睘鎬ц緗爣鍑嗛殢鐫鏁版嵁婧愮殑綾誨瀷涓嶅悓鑰屽彉鍖栵紝杞歡鐢ㄦ埛甯稿父涓嶄範鎯繖縐嶈緗柟寮忥紝閮藉笇鏈涙湁鍙鍖栫殑鏁版嵁婧愯緗柟娉曘備負姝icrosoft鎻愪緵浜嗛氱敤鏁版嵁榪炴帴鏂囦歡錛?UDL錛夋潵寤虹珛鍜屾祴璇旳DO榪炴帴灞炴с侫DO榪炴帴瀵硅薄鍙互寰堟柟渚垮湴浣跨敤UDL鏂囦歡鏉ヨ繛鎺ユ暟鎹簮錛屼笅闈緥瀛愪嬌鐢╩y_data1.udl鏉ュ垱寤篈DO榪炴帴銆? _ConnectionPtr m_pDBConn; m_pDBConn.CreateInstance(__uuidof(Connection)); m_pDBConn->ConnectionString ="File Name=c:\mydir\my_data1.udl"; //娉ㄦ剰錛歯ame=c錛氱瓑鍙蜂袱杈逛笉鑳芥湁絀烘牸 m_pDBConn->Open("","","",NULL); 銆銆 榪欐牱涓鏉ユ棤璁烘暟鎹簮濡備綍鍙樺寲錛屽湪杞歡涓兘鍙互鐢ㄧ粺涓鐨勬柟娉曠紪紼嬨傚綋鏁版嵁婧愭敼鍙樻椂錛屽彧瑕佸弻鍑葷浉搴旂殑udl鏂囦歡鍗沖彲鍙鍖栧湴璁劇疆鏁版嵁婧愶紝鏃犻渶鏇存敼杞歡銆? 銆銆 鍥犱負ADO鏄疌OM鎺ュ彛錛屼負浜嗚蔣浠剁殑鍙潬鎬э紝鎵撳紑ADO榪炴帴鏃訛紝鍙互鍔犲叆寮傚父澶勭悊浠g爜銆? try{ m_pDBConn->Open("","","",NULL); }catch(_com_error &e){ //澶勭悊寮傚父鐨勪唬鐮? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . m_pDBConn=NULL; } 銆銆 鍥犱負_ConnectionPtr m_pDBConn鏄櫤鑳芥寚閽堬紝搴斿湪澶勭悊寮傚父浠g爜鏃跺皢鏅鴻兘鎸囬拡璁句負NULL鍚庡皢鑷姩灝嗗紩鐢ㄨ鏁伴檷涓?銆? 銆銆 濡傛灉涓嶅嚭鐜板紓甯革紝鍙鍦ㄤ嬌鐢ㄥ畬m_pDBConn錛屽彧瑕佸紩鐢–lose鏂規硶鍗沖彲銆? 銆銆 2.鍒涘緩浣犳墍闇鐨刄DL鏂囦歡 銆銆 鍦ㄤ綘鎵鎯沖垱寤篣DL鏂囦歡鐨勭洰褰曚腑鍗曞嚮鍙抽敭錛岄夋嫨浠庤彍鍗?鏂板緩|Microsoft 鏁版嵁榪炴帴錛岀劧鍚庡皢鏂板垱寤虹殑UDL鏂囦歡鏇存敼涓轟綘鎵甯屾湜鐨勬枃浠跺悕錛?UDL鎵╁睍鍚嶄笉鑳芥敼鍙橈級銆?
]]> 鍦╒isual C++涓敤ADO榪涜鏁版嵁搴撶紪紼? http://m.shnenglu.com/ivenher/articles/992.html鐖遍キ鐩?/dc:creator>鐖遍キ鐩?/author>Wed, 09 Nov 2005 02:49:00 GMT http://m.shnenglu.com/ivenher/articles/992.html http://m.shnenglu.com/ivenher/comments/992.html http://m.shnenglu.com/ivenher/articles/992.html#Feedback 0 http://m.shnenglu.com/ivenher/comments/commentRss/992.html http://m.shnenglu.com/ivenher/services/trackbacks/992.html
銆
銆1. 鐢熸垚搴旂敤紼嬪簭 妗嗘灦騫跺垵濮嬪寲OLE/COM搴撶幆澧? 銆銆鍒涘緩涓涓爣鍑嗙殑MFC AppWizard(exe)搴旂敤紼嬪簭 錛岀劧鍚庡湪浣跨敤ADO鏁版嵁搴?/A>鐨処nitInstance鍑芥暟涓垵濮嬪寲OLE/COM搴擄紙鍥犱負ADO搴撴槸涓涓狢OM DLL搴擄級銆?BR>鏈緥涓猴細
銆BOOL CAdotestDlg::OnInitDialog()
銆{
::CoInitialize(NULL); //鍒濆鍖朞LE/COM搴撶幆澧?
}
紼嬪簭 鏈鍚庤璋冪敤 ::CoUninitialize()錛?/閲婃斁紼嬪簭 鍗犵敤鐨凜OM 璧勬簮銆?BR>鍙﹀錛?/TD>
m_pRecordset->Close(); 娉ㄦ剰錛侊紒錛佷笉瑕佸嬈″叧闂紒錛侊紒錛侊紒錛侊紒錛侊紒錛侊紒錛?
m_pConnection->Close();
m_pRecordset = NULL;
m_pConnection = NULL;
銆2. 寮曞叆ADO搴?A target=_blank>鏂囦歡 銆銆浣跨敤ADO鍓嶅繀欏誨湪宸ョ▼鐨剆tdafx.h鏂囦歡 鏈鍚庣敤鐩存帴寮曞叆絎﹀彿錛僫mport寮曞叆ADO搴?A target=_blank>鏂囦歡錛屼互浣跨紪璇戝櫒鑳芥紜紪璇戙備唬鐮佸涓嬶細 #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涓鍙栬繖涓被鍨嬪簱錛屽茍浠ユ鍒涘緩涓緇凜錛嬶紜澶?A target=_blank>鏂囦歡銆傝繖浜涘ご鏂囦歡 鍏鋒湁.tli 鍜?tlh鎵╁睍鍚嶏紝璇昏呭彲浠ュ湪欏圭洰鐨勭洰褰曚笅鎵懼埌榪欎袱涓?A target=_blank>鏂囦歡銆傚湪C錛嬶紜紼嬪簭 浠g爜涓皟鐢ㄧ殑ADO綾昏鍦ㄨ繖浜?A target=_blank>鏂囦歡涓畾涔夈? 銆紼嬪簭 鐨勭涓夎鎸囩ずADO瀵硅薄涓嶄嬌鐢ㄥ悕縐扮┖闂淬傚湪鏈変簺搴旂敤紼嬪簭 涓紝鐢變簬搴旂敤紼嬪簭 涓殑瀵硅薄涓嶢DO涓殑瀵硅薄涔嬮棿鍙兘浼氬嚭鐜板懡鍚嶅啿紿侊紝鎵浠ユ湁蹇呰浣跨敤鍚嶇О絀洪棿銆傚鏋滆浣跨敤鍚嶇О絀洪棿錛屽垯鍙妸絎笁琛?A target=_blank>紼嬪簭淇敼涓猴細 rename_namespace("AdoNS")銆傜鍥涜浠g爜灝咥DO涓殑EOF(鏂囦歡 緇撴潫)鏇村悕涓篴doEOF錛屼互閬垮厤涓庡畾涔変簡鑷繁鐨凟OF鐨勫叾浠栧簱鍐茬獊銆? 銆3錛庡埄鐢ㄦ櫤鑳芥寚閽堣繘琛?A target=_blank>鏁版嵁搴?/A>鎿嶄綔 銆銆鍦–aboutDlg澶?A target=_blank>鏂囦歡涓畾涔変袱涓狝DO鏅鴻兘鎸囬拡綾誨疄渚?騫跺湪瀵硅瘽妗嗕腑鍔犲叆涓涓狶istCtrl銆?BR>銆
class CAdotestDlg : public CDialog
{
_ConnectionPtr m_pConnection;
_RecordsetPtr m_pRecordset;
銆銆 ClistCtrl m_List;
......
}
ADO搴撳寘鍚笁涓櫤鑳芥寚閽?_ConnectionPtr銆乢CommandPtr鍜宊RecordsetPtr銆?BR> _ConnectionPtr閫氬父琚敤鏉ュ垱寤轟竴涓暟鎹繛鎺ユ垨鎵ц涓鏉′笉榪斿洖浠諱綍緇撴灉鐨凷QL璇彞錛屽涓涓瓨鍌ㄨ繃紼嬨?BR>_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鐨凮DBC鏁版嵁婧愩傝紼嬪簭 灝嗘妸琛╩iddle涓殑BIG_NAME瀛楁鍊兼樉紺哄湪鍒楄〃鎺т歡涓?BR> 銆4錛庢墽琛孲QL鍛戒護騫跺彇寰楃粨鏋滆褰曢泦 涓轟簡鍙栧緱緇撴灉璁板綍闆嗭紝鎴戜滑瀹氫箟涓涓寚鍚慠ecordset瀵硅薄鐨勬寚閽?_RecordsetPtr m_pRecordset; 騫朵負鍏跺垱寤篟ecordset瀵硅薄鐨勫疄渚? m_pRecordset.CreateInstance("ADODB.Recordset"); SQL鍛戒護鐨勬墽琛屽彲浠ラ噰鐢ㄥ縐嶅艦寮忥紝涓嬮潰鎴戜滑涓榪涜闃愯堪銆?BR> (1)鍒╃敤Connection瀵硅薄鐨凟xecute鏂規硶鎵цSQL鍛戒護 Execute鏂規硶鐨勫師鍨嬪涓嬫墍紺?
_RecordsetPtr Connection15::Execute ( _bstr_t CommandText, VARIANT * RecordsAffected, long Options )
鍏朵腑CommandText鏄懡浠ゅ瓧涓詫紝閫氬父鏄疭QL鍛戒護銆?
鍙傛暟RecordsAffected鏄搷浣滃畬鎴愬悗鎵褰卞搷鐨勮鏁?
鍙傛暟Options琛ㄧずCommandText涓唴瀹圭殑綾誨瀷錛孫ptions鍙互鍙栧涓嬪間箣涓錛?
adCmdText:琛ㄦ槑CommandText鏄枃鏈懡浠?
adCmdTable:琛ㄦ槑CommandText鏄竴涓〃鍚?
adCmdProc:琛ㄦ槑CommandText鏄竴涓瓨鍌ㄨ繃紼?
adCmdUnknown:鏈煡
Execute鎵ц瀹屽悗榪斿洖涓涓寚鍚戣褰曢泦鐨勬寚閽堬紝涓嬮潰鎴戜滑緇欏嚭鍏蜂綋浠g爜騫朵綔璇存槑銆?
_variant_t RecordsAffected;
///鎵цSQL鍛戒護錛欳REATE TABLE鍒涘緩琛ㄦ牸users,users鍖呭惈鍥涗釜瀛楁:鏁村艦ID,瀛楃 涓瞮sername,鏁村艦old,鏃ユ湡鍨媌irthday
m_pConnection->Execute("CREATE TABLE users(ID INTEGER,username TEXT,old INTEGER,birthday DATETIME)",
&RecordsAffected,
adCmdText);
///寰琛ㄦ牸閲岄潰娣誨姞璁板綍
m_pConnection->Execute("INSERT INTO users(ID,username,old,birthday) VALUES (1, ''''Washington'''',25,''''1970/1/1'''')",&RecordsAffected,adCmdText);
///灝嗘墍鏈夎褰昽ld瀛楁鐨勫煎姞涓
m_pConnection->Execute("UPDATE users SET old = old+1",&RecordsAffected,adCmdText);
///鎵цSQL緇熻鍛戒護寰楀埌鍖呭惈璁板綍鏉℃暟鐨勮褰曢泦
m_pRecordset = m_pConnection->Execute("SELECT COUNT(*) FROM users",&RecordsAffected,adCmdText);
_variant_t vIndex = (long)0;
_variant_t vCount = m_pRecordset->GetCollect(vIndex);///鍙栧緱絎竴涓瓧孌電殑鍊兼斁鍏Count鍙橀噺
涓婁袱鍙ュ彲浠ュ啓鎴愨?_variant_t vCount = m_pRecordset->GetCollect((_variant_t)((long)0));
m_pRecordset->Close();///鍏抽棴璁板綍闆?
CString message;
message.Format("鍏辨湁%d鏉¤褰?,vCount.lVal);
AfxMessageBox(message);///鏄劇ず褰撳墠璁板綍鏉℃暟
(2)鍒╃敤Command瀵硅薄鏉ユ墽琛孲QL鍛戒護
_CommandPtr m_pCommand;
m_pCommand.CreateInstance("ADODB.Command");
_variant_t vNULL;
vNULL.vt = VT_ERROR;
vNULL.scode = DISP_E_PARAMNOTFOUND;///瀹氫箟涓烘棤鍙傛暟
m_pCommand->ActiveConnection = m_pConnection;///闈炲父鍏抽敭鐨勪竴鍙ワ紝灝嗗緩绔嬬殑榪炴帴璧嬪肩粰瀹?
m_pCommand->CommandText = "SELECT * FROM users";///鍛戒護瀛椾覆
m_pRecordset = m_pCommand->Execute(&vNULL,&vNULL,adCmdText);///鎵ц鍛戒護錛屽彇寰楄褰曢泦
鍦ㄨ繖孌典唬鐮佷腑鎴戜滑鍙槸鐢–ommand瀵硅薄鏉ユ墽琛屼簡SELECT鏌ヨ璇彞錛孋ommand瀵硅薄鍦ㄨ繘琛屽瓨鍌ㄨ繃紼嬬殑璋冪敤涓兘鐪熸浣撶幇瀹冪殑浣滅敤銆備笅嬈℃垜浠皢璇︾粏浠嬬粛銆? (3)鐩存帴鐢≧ecordset瀵硅薄榪涜鏌ヨ鍙栧緱璁板綍闆? 瀹炰緥鈥斺?/TD>
void CGmsaDlg::OnDBSelect()
{
// TODO: Add your control notification handler code here
_RecordsetPtr Rs1; //瀹氫箟Recordset瀵硅薄
_bstr_t Connect("DSN=GMS;UID=sa;PWD=;");//瀹氫箟榪炴帴瀛楃 涓?
_bstr_t Source ("SELECT count(*) FROM buaa.mdb010"); //瑕佹墽琛岀殑SQL璇彞
::CoInitialize(NULL); //鍒濆鍖朢s1瀵硅薄
HRESUL hr = Rs1.CreateInstance( __uuidof( Recordset ) );
//鐪佺暐瀵硅繑鍥炲糷r鐨勫垽鏂?
Rs1->Open( Source,
Connect,
adOpenForwardOnly,
adLockReadOnly,
-1 );
_variant_t temp=Rs1->GetCollect(_variant_t((long)0));
CString strTemp=(char* )(_bstr_t)temp;
MessageBox("OK!"+strTemp);
}
渚嬪
m_pRecordset->Open("SELECT * FROM users",
_variant_t((IDispatch *)m_pConnection,true),
adOpenStatic,
adLockOptimistic,
adCmdText);
Open鏂規硶鐨勫師鍨嬫槸榪欐牱鐨?
HRESULT Recordset15::Open ( const _variant_t & Source,
const _variant_t & ActiveConnection,
enum CursorTypeEnum CursorType,
enum LockTypeEnum LockType,
long Options )
鍏朵腑錛?
鈶燬ource鏄暟鎹煡璇?A target=_blank>瀛楃涓?
鈶ctiveConnection鏄凡緇忓緩绔嬪ソ鐨勮繛鎺ワ紙鎴戜滑闇瑕佺敤Connection瀵硅薄鎸囬拡鏉ユ瀯閫犱竴涓猒variant_t瀵硅薄)
鈶ursorType鍏夋爣綾誨瀷錛屽畠鍙互鏄互涓嬪間箣涓,璇風湅榪欎釜鏋氫婦緇撴瀯:
enum CursorTypeEnum
{
adOpenUnspecified = -1,///涓嶄綔鐗瑰埆鎸囧畾
adOpenForwardOnly = 0,///鍓嶆粴闈欐佸厜鏍囥傝繖縐嶅厜鏍囧彧鑳藉悜鍓嶆祻瑙堣褰曢泦錛屾瘮濡傜敤MoveNext鍚戝墠婊氬姩,榪欑鏂瑰紡鍙互鎻愰珮嫻忚閫熷害銆備絾璇稿BookMark,RecordCount,AbsolutePosition,AbsolutePage閮戒笉鑳戒嬌鐢?
adOpenKeyset = 1,///閲囩敤榪欑鍏夋爣鐨勮褰曢泦鐪嬩笉鍒板叾瀹冪敤鎴風殑鏂板銆佸垹闄ゆ搷浣滐紝浣嗗浜庢洿鏂板師鏈夎褰曠殑鎿嶄綔瀵逛綘鏄彲瑙佺殑銆?
adOpenDynamic = 2,///鍔ㄦ佸厜鏍囥傛墍鏈?A target=_blank>鏁版嵁搴?/A>鐨勬搷浣滈兘浼氱珛鍗沖湪鍚勭敤鎴瘋褰曢泦涓婂弽搴斿嚭鏉ャ?
adOpenStatic = 3///闈欐佸厜鏍囥傚畠涓轟綘鐨勮褰曢泦浜х敓涓涓潤鎬佸浠斤紝浣嗗叾瀹冪敤鎴風殑鏂板銆佸垹闄ゃ佹洿鏂版搷浣滃浣犵殑璁板綍闆嗘潵璇存槸涓嶅彲瑙佺殑銆?
};
鈶ockType閿佸畾綾誨瀷錛屽畠鍙互鏄互涓嬪間箣涓錛岃鐪嬪涓嬫灇涓劇粨鏋勶細
enum LockTypeEnum
{
adLockUnspecified = -1,///鏈寚瀹?
adLockReadOnly = 1,///鍙璁板綍闆?
adLockPessimistic = 2,鎮茶閿佸畾鏂瑰紡銆傛暟鎹湪鏇存柊鏃墮攣瀹氬叾瀹冩墍鏈夊姩浣滐紝榪欐槸鏈瀹夊叏鐨勯攣瀹氭満鍒?
adLockOptimistic = 3,涔愯閿佸畾鏂瑰紡銆傚彧鏈夊湪浣犺皟鐢║pdate鏂規硶鏃舵墠閿佸畾璁板綍銆傚湪姝や箣鍓嶄粛鐒跺彲浠ュ仛鏁版嵁鐨勬洿鏂般佹彃鍏ャ佸垹闄ょ瓑鍔ㄤ綔
adLockBatchOptimistic = 4錛屼箰瑙傚垎鎵規洿鏂般傜紪杈戞椂璁板綍涓嶄細閿佸畾錛屾洿鏀廣佹彃鍏ュ強鍒犻櫎鏄湪鎵瑰鐞嗘ā寮忎笅瀹屾垚銆?
};
鈶ptions鍙互鍙栧涓嬪間箣涓錛?
adCmdText:琛ㄦ槑CommandText鏄枃鏈懡浠?
adCmdTable:琛ㄦ槑CommandText鏄竴涓〃鍚?
adCmdProc:琛ㄦ槑CommandText鏄竴涓瓨鍌ㄨ繃紼?
adCmdUnknown:鏈煡
5. 璁板綍闆嗙殑閬嶅巻銆佹洿鏂?BR> 鏍規嵁鎴戜滑鍒氭墠閫氳繃鎵цSQL鍛戒護寤虹珛濂界殑users琛紝瀹冨寘鍚洓涓瓧孌?ID,username,old,birthday 浠ヤ笅鐨勪唬鐮佸疄鐜幫細鎵撳紑璁板綍闆嗭紝閬嶅巻鎵鏈夎褰曪紝鍒犻櫎絎竴鏉¤褰曪紝娣誨姞涓夋潯璁板綍錛岀Щ鍔ㄥ厜鏍囧埌絎簩鏉¤褰曪紝 鏇存敼鍏跺勾榫勶紝淇濆瓨鍒?A target=_blank>鏁版嵁搴?/A>銆?/TD>
_variant_t vUsername,vBirthday,vID,vOld;
_RecordsetPtr m_pRecordset;
m_pRecordset.CreateInstance("ADODB.Recordset");
m_pRecordset->Open("SELECT * FROM users",
_variant_t((IDispatch*)m_pConnection,true),
adOpenStatic,
adLockOptimistic,
adCmdText);
while(!m_pRecordset->adoEOF)
{
vID = m_pRecordset->GetCollect(_variant_t((long)0));///鍙栧緱絎?鍒楃殑鍊?浠?寮濮嬭鏁幫紝
///浣犱篃鍙互鐩存帴緇欏嚭鍒楃殑鍚嶇О錛屽涓嬩竴琛?
vUsername = m_pRecordset->GetCollect("username");///鍙栧緱username瀛楁鐨勫?
vOld = m_pRecordset->GetCollect("old");
vBirthday = m_pRecordset->GetCollect("birthday");
///鍦―EBUG鏂瑰紡涓嬬殑OUTPUT紿楀彛杈撳嚭璁板綍闆嗕腑鐨勮褰?
if(vID.vt != VT_NULL && vUsername.vt != VT_NULL && vOld.vt != VT_NULL && vBirthday.vt != VT_NULL)
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->MoveFirst();///縐誨埌棣栨潯璁板綍
m_pRecordset->Delete(adAffectCurrent);///鍒犻櫎褰撳墠璁板綍
///娣誨姞涓夋潯鏂拌褰曞茍璧嬪?
for(int i=0;i<3;i++)
{
m_pRecordset->AddNew();///娣誨姞鏂拌褰?
m_pRecordset->PutCollect("ID",_variant_t((long)(i+10)));
m_pRecordset->PutCollect("username",_variant_t("鍙跺埄閽?));
m_pRecordset->PutCollect("old",_variant_t((long)71));
m_pRecordset->PutCollect("birthday",_variant_t("1930-3-15"));
}
m_pRecordset->Move(1,_variant_t((long)adBookmarkFirst));///浠庣涓鏉¤褰曞線涓嬬Щ鍔ㄤ竴鏉¤褰?鍗崇Щ鍔ㄥ埌絎簩鏉¤褰曞
m_pRecordset->PutCollect(_variant_t("old"),_variant_t((long)45));///淇敼鍏跺勾榫?
m_pRecordset->Update();///淇濆瓨鍒板簱涓?
澶囨敞錛氬嬈℃煡璇㈠彲鎶婃煡璇㈣繃紼嬪仛鎴愪竴涓嚱鏁癊xecuteSQL璁﹎_pRecordset鑾峰緱榪炴帴鎸囬拡m_pConnection鏌ヨ緇撴灉
void ExecuteSQL(_ConnectionPtr m_pConnection, _RecordsetPtr m_pRecordset,CString strSql)
{
//鎵цSelect 璇彞
BSTR bstrSQL = strSql.AllocSysString();
try
{
m_pRecordset->Open(bstrSQL,(IDispatch*)m_pConnection,adOpenDynamic,adLockOptimistic,adCmdText);
//adOpenDynamic錛氬姩鎬? adLockOptimistic涔愯灝侀攣娉? adCmdText錛氭枃鏈煡璇㈣鍙?
}
catch(_com_error error)
{
CString errorMessage;
errorMessage.Format("%s",(LPTSTR)error.Description());
AfxMessageBox(errorMessage);
}
}
//鍑洪敊澶勭悊錛?
3127鈥斺旀病鏈夋壘鍒扮洰鏍囪〃
3092鈥斺旂洰鏍囪〃宸茬粡瀛樺湪
渚嬪錛?
catch(const _com_error e)
{
AfxMessageBox(e.Description());
long errorCode=e.WCode();
if(3127==errorCode) AfxMessageBox("琛ㄤ笉瀛樺湪");
if(3092==errorCode) AfxMessageBox("琛ㄥ凡緇忓瓨鍦?);
return FALSE;
}
銆
]]> ADO榪炴帴瀛楃涓?/title> http://m.shnenglu.com/ivenher/articles/827.html鐖遍キ鐩?/dc:creator>鐖遍キ鐩?/author>Mon, 24 Oct 2005 08:19:00 GMT http://m.shnenglu.com/ivenher/articles/827.html http://m.shnenglu.com/ivenher/comments/827.html http://m.shnenglu.com/ivenher/articles/827.html#Feedback 0 http://m.shnenglu.com/ivenher/comments/commentRss/827.html http://m.shnenglu.com/ivenher/services/trackbacks/827.html www.connectionstrings.com
SQL Server
ODBC
Standard Security:
"Driver={SQL Server};Server=Aron1;Database=pubs;Uid=sa;Pwd=asdasd;"
Trusted connection:
"Driver={SQL Server};Server=Aron1;Database=pubs;Trusted_Connection=yes;"
Prompt for username and password:
oConn.Properties("Prompt") = adPromptAlways oConn.Open "Driver={SQL Server};Server=Aron1;DataBase=pubs;"
OLE DB, OleDbConnection (.NET)
Standard Security:
"Provider=sqloledb;Data Source=Aron1;Initial Catalog=pubs;User Id=sa;Password=asdasd;"
Trusted Connection:
"Provider=sqloledb;Data Source=Aron1;Initial Catalog=pubs;Integrated Security=SSPI;"
(use serverName\instanceName as Data Source to use an specifik SQLServer instance, only SQLServer2000)
Prompt for username and password:
oConn.Provider = "sqloledb" oConn.Properties("Prompt") = adPromptAlways oConn.Open "Data Source=Aron1;Initial Catalog=pubs;"
Connect via an IP address:
"Provider=sqloledb;Data Source=190.190.200.100,1433;Network Library=DBMSSOCN;Initial Catalog=pubs;User ID=sa;Password=asdasd;"
(DBMSSOCN=TCP/IP instead of Named Pipes, at the end of the Data Source is the port to use (1433 is the default))
SqlConnection (.NET)
Data Shape
MS Data Shape "Provider=MSDataShape;Data Provider=SQLOLEDB;Data Source=Aron1;Initial Catalog=pubs;User ID=sa;Password=asdasd;"
Want to learn data shaping? Check out 4GuyfFromRolla's great article about Data Shaping >>
Read more
How to define wich network protocol to use
Example:
"Provider=sqloledb;Data Source=190.190.200.100,1433;
Network Library=DBMSSOCN ;Initial Catalog=pubs;User ID=sa;Password=asdasd;"
Name
Network library
dbnmpntw
Win32 Named Pipes
dbmssocn
Win32 Winsock TCP/IP
dbmsspxn
Win32 SPX/IPX
dbmsvinn
Win32 Banyan Vines
dbmsrpcn
Win32 Multi-Protocol (Windows RPC)
Important note! When connecting through the SQLOLEDB provider use the syntax Network Library =dbmssocn and when connecting through MSDASQL provider use the syntax Network =dbmssocn
All SqlConnection connectionstring properties
This table shows all connectionstring properties for the ADO.NET SqlConnection object. Most of the properties are also used in ADO. All properties and descriptions is from msdn.
Name
Default
Description
Application Name
The name of the application, or '.Net SqlClient Data Provider' if no application name is provided.
AttachDBFilename -or- extended properties -or- Initial File Name
The name of the primary file, including the full path name, of an attachable database. The database name must be specified with the keyword 'database'.
Connect Timeout -or- Connection Timeout
15
The length of time (in seconds) to wait for a connection to the server before terminating the attempt and generating an error.
Connection Lifetime
0
When a connection is returned to the pool, its creation time is compared with the current time, and the connection is destroyed if that time span (in seconds) exceeds the value specified by connection lifetime. Useful in clustered configurations to force load balancing between a running server and a server just brought on-line.
Connection Reset
'true'
Determines whether the database connection is reset when being removed from the pool. Setting to 'false' avoids making an additional server round-trip when obtaining a connection, but the programmer must be aware that the connection state is not being reset.
Current Language
The SQL Server Language record name.
Data Source -or- Server -or- Address -or- Addr -or- Network Address
The name or network address of the instance of SQL Server to which to connect.
Enlist
'true'
When true, the pooler automatically enlists the connection in the creation thread's current transaction context.
Initial Catalog -or- Database
The name of the database.
Integrated Security -or- Trusted_Connection
'false'
Whether the connection is to be a secure connection or not. Recognized values are 'true', 'false', and 'sspi', which is equivalent to 'true'.
Max Pool Size
100
The maximum number of connections allowed in the pool.
Min Pool Size
0
The minimum number of connections allowed in the pool.
Network Library -or- Net
'dbmssocn'
The network library used to establish a connection to an instance of SQL Server. Supported values include dbnmpntw (Named Pipes), dbmsrpcn (Multiprotocol), dbmsadsn (Apple Talk), dbmsgnet (VIA), dbmsipcn (Shared Memory) and dbmsspxn (IPX/SPX), and dbmssocn (TCP/IP). The corresponding network DLL must be installed on the system to which you connect. If you do not specify a network and you use a local server (for example, "." or "(local)"), shared memory is used.
Packet Size
8192
Size in bytes of the network packets used to communicate with an instance of SQL Server.
Password -or- Pwd
The password for the SQL Server account logging on.
Persist Security Info
'false'
When set to 'false', security-sensitive information, such as the password, is not returned as part of the connection if the connection is open or has ever been in an open state. Resetting the connection string resets all connection string values including the password.
Pooling
'true'
When true, the SQLConnection object is drawn from the appropriate pool, or if necessary, is created and added to the appropriate pool.
User ID
The SQL Server login account.
Workstation ID
the local computer name
The name of the workstation connecting to SQL Server.
Note Use ; to separate each property. If a name occurs more than once, the value from the last one in the connectionstring will be used. If you are building your connectionstring in your app using values from user input fields, make sure the user can't change the connectionstring by inserting an additional property with another value within the user value.
Access
ODBC
Standard Security:
"Driver={Microsoft Access Driver (*.mdb)};Dbq=C:\mydatabase.mdb;Uid=Admin;Pwd=;"
Workgroup:
"Driver={Microsoft Access Driver (*.mdb)};Dbq=C:\mydatabase.mdb;SystemDB=C:\mydatabase.mdw;"
Exclusive:
"Driver={Microsoft Access Driver (*.mdb)};Dbq=C:\mydatabase.mdb;Exclusive=1;Uid=admin;Pwd="
OLE DB, OleDbConnection (.NET)
Standard security:
"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=\somepath\mydb.mdb;User Id=admin;Password=;"
Workgroup (system database):
"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=\somepath\mydb.mdb;Jet OLEDB:System Database=system.mdw;"
With password:
"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=\somepath\mydb.mdb;Jet OLEDB:Database Password=MyDbPassword;"
Oracle
ODBC
OLE DB, OleDbConnection (.NET)
OracleConnection (.NET)
Standard:
"Data Source=Oracle8i;Integrated Security=yes";
This one works only with Oracle 8i release 3 or later
Declare the OracleConnection:
C#: using System.Data.OracleClient; OracleConnection oOracleConn = new OracleConnection(); oOracleConn.ConnectionString = "my connectionstring"; oOracleConn.Open(); VB.NET: Imports System.Data.OracleClient Dim oOracleConn As OracleConnection = New OracleConnection() oOracleConn.ConnectionString = "my connectionstring" oOracleConn.Open()
Core Labs OraDirect (.NET)
Standard: "User ID=scott; Password=tiger; Host=ora; Pooling=true; Min Pool Size=0;Max Pool Size=100; Connection Lifetime=0"
Read more at Core Lab and the product page .
Data Shape
MS Data Shape: "Provider=MSDataShape.1;Persist Security Info=False;Data Provider=MSDAORA;Data Source=orac;user id=username;password=mypw"
Want to learn data shaping? Check out 4GuyfFromRolla's great article about Data Shaping >>
MySQL
ODBC
OLE DB, OleDbConnection (.NET)
MySqlConnection (.NET)
eInfoDesigns.dbProvider:
"Data Source=server;Database=mydb;User ID=username;Password=pwd;Command Logging=false"
This one is used with eInfoDesigns dbProvider, an add-on to .NET
Declare the MySqlConnection:
C#: using eInfoDesigns.dbProvider.MySqlClient; MySqlConnection oMySqlConn = new MySqlConnection(); oMySqlConn.ConnectionString = "my connectionstring"; oMySqlConn.Open(); VB.NET: Imports eInfoDesigns.dbProvider.MySqlClient Dim oMySqlConn As MySqlConnection = New MySqlConnection() oMySqlConn.ConnectionString = "my connectionstring" oMySqlConn.Open()
SevenObjects MySqlClient (.NET)
Standard:
"Host=server; UserName=myusername; Password=mypassword;Database=mydb;"
This is a freeware ADO.Net data provider from SevenObjects
Core Labs MySQLDirect (.NET)
Standard:
"User ID=root; Password=pwd; Host=localhost; Port=3306; Database=test;Direct=true; Protocol=TCP; Compress=false; Pooling=true; Min Pool Size=0;Max Pool Size=100; Connection Lifetime=0"
Read more at Core Lab and the product page .
Interbase
ODBC, Easysoft
ODBC, Intersolv
OLE DB, SIBPROvider
Standard:
"provider=sibprovider;location=localhost:;data source=c:\databases\gdbs\mygdb.gdb;user id=SYSDBA;password=masterkey"
Specifying character set:
"provider=sibprovider;location=localhost:;data source=c:\databases\gdbs\mygdb.gdb;user id=SYSDBA;password=masterkey;character set=ISO8859_1"
Specifying role:
"provider=sibprovider;location=localhost:;data source=c:\databases\gdbs\mygdb.gdb;user id=SYSDBA;password=masterkey;role=DIGITADORES"
Read more about SIBPROvider >> Read more about connecting to Interbase in this Borland Developer Network article http://community.borland.com/article/0,1410,27152,00.html
IBM DB2
OLE DB, OleDbConnection (.NET) from ms
TCP/IP:
"Provider=DB2OLEDB;Network Transport Library=TCPIP;Network Address=XXX.XXX.XXX.XXX;Initial Catalog=MyCtlg;Package Collection=MyPkgCol;Default Schema=Schema;User ID=MyUser;Password=MyPW"
APPC:
"Provider=DB2OLEDB;APPC Local LU Alias=MyAlias;APPC Remote LU Alias=MyRemote;Initial Catalog=MyCtlg;Package Collection=MyPkgCol;Default Schema=Schema;User ID=MyUser;Password=MyPW"
Sybase
ODBC
OLE DB
Adaptive Server Anywhere (ASA):
Adaptive Server Enterprise (ASE) with Data Source .IDS file:
"Provider=Sybase ASE OLE DB Provider; Data source=myASE"
Note that you must create a Data Source .IDS file using the Sybase Data Administrator. These .IDS files resemble ODBC DSNs.
Adaptive Server Enterprise (ASE):
"Provider=Sybase.ASEOLEDBProvider;Srvr=myASEserver,5000;Catalog=myDBname;User Id=username;Password=password"
- some reports on problem using the above one, try the following as an alternative - "Provider=Sybase.ASEOLEDBProvider;Server Name=myASEserver,5000;Initial Catalog=myDBname;User Id=username;Password=password"
This one works only from Open Client 12.5 where the server port number feature works,鐕糽lowing fully qualified connection strings to be used without defining鐕糿y .IDS Data Source files.
Informix
ODBC
Informix 3.30:
"Dsn='';Driver={INFORMIX 3.30 32 BIT};Host=hostname;Server=myserver;Service=service-name;Protocol=olsoctcp;Database=mydb;UID=username;PWD=myPwd
Informix-CLI 2.5:
"Driver={Informix-CLI 2.5 (32 Bit)};Server=myserver;Database=mydb;Uid=username;Pwd=myPwd"
OLE DB
Mimer SQL
PostgreSQL
Core Labs PostgreSQLDirect (.NET)
Standard:
"User ID=root; Password=pwd; Host=localhost; Port=5432; Database=testdb;Pooling=true; Min Pool Size=0; Max Pool Size=100; Connection Lifetime=0"
Read more at Core Lab and the product page .
DSN
Excel
ODBC
OLE DB
Standard:
"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\MyExcel.xls;Extended Properties=""Excel 8.0;HDR=Yes;IMEX=1"""
"HDR=Yes;" indicates that the first row contains columnnames, not data
"IMEX=1;" tells the driver to always read "intermixed" data columns as text
TIP! SQL syntax: "SELECT * FROM [sheet1$]" - i.e. worksheet name followed by a "$" and wrapped in "[" "]" brackets.
Text
ODBC
OLE DB
Standard:
"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\txtFilesFolder\;Extended Properties=""text;HDR=Yes;FMT=Delimited"""
"HDR=Yes;" indicates that the first row contains columnnames, not data
DBF / FoxPro
ODBC
OLE DB, OleDbConnection (.NET)
Visual FoxPro
OLE DB, OleDbConnection (.NET)
Database container (.DBC):
"Provider=vfpoledb.1;Data Source=C:\MyDbFolder\MyDbContainer.dbc;Password=MyPassWord;Collating Sequence=machine"
Free table directory:
"Provider=vfpoledb.1;Data Source=C:\MyDataDirectory\;Password=MyPassWord;Collating Sequence=general"
Read more (Microsoft msdn) >>
ODBC
Microsoft Visual Foxpro site: http://msdn.microsoft.com/vfoxpro
Pervasive
UDL
]]> 青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
中文精品一区二区三区 |
久久综合九色综合久99 |
欧美日韩国产免费 |
欧美在线观看视频 |
99亚洲伊人久久精品影院红桃 |
中文国产亚洲喷潮 |
亚洲激情欧美激情 |
国产精品区一区二区三区 |
欧美成人国产一区二区 |
亚洲欧美成人一区二区三区 |
亚洲日本va午夜在线电影 |
亚洲香蕉伊综合在人在线视看 |
国产精品日韩高清 |
久久国产精品99久久久久久老狼 |
91久久精品网 |
亚洲国产精品久久久久久女王 |
国产精品手机在线 |
国产女主播一区二区三区 |
国产精品美女在线 |
国产精品一区二区欧美 |
国产欧美日韩精品a在线观看 |
国产伦精品一区二区三区四区免费 |
欧美天堂在线观看 |
欧美日韩人人澡狠狠躁视频 |
国产精品久久77777 |
国精品一区二区三区 |
亚洲国产精品一区制服丝袜 |
99精品国产高清一区二区 |
在线视频亚洲欧美 |
亚洲欧美日韩高清 |
免费视频亚洲 |
亚洲午夜久久久 |
榴莲视频成人在线观看 |
国产精品久久久久影院亚瑟
|
久久女同精品一区二区 |
久久久久久久久一区二区 |
欧美精品一区二区在线观看 |
国产午夜精品久久久 |
亚洲私拍自拍 |
aa成人免费视频 |
久久综合色播五月 |
伊人久久av导航 |
欧美在线播放视频 |
在线亚洲伦理 |
欧美不卡在线视频 |
香蕉久久夜色精品 |
国产精品高清在线 |
亚洲嫩草精品久久 |
亚洲免费在线看 |
国产日产欧美精品 |
久久亚洲图片 |
久久久国产成人精品 |
国内久久精品视频 |
久久一区二区三区四区 |
亚洲欧美偷拍卡通变态 |
国产一区二区福利 |
欧美sm视频 |
欧美日韩成人一区二区三区 |
亚洲国产综合在线 |
最新高清无码专区 |
国产精品日韩专区 |
久久看片网站 |
欧美日韩岛国 |
久久丁香综合五月国产三级网站 |
亚洲男女毛片无遮挡 |
亚洲大胆女人 |
一本色道久久综合亚洲精品婷婷 |
亚洲欧美国产另类 |
亚洲国产精品久久久久久女王 |
亚洲高清二区 |
国产精品综合久久久 |
欧美福利精品 |
国产精品久久久久久久久动漫
|
亚洲区第一页 |
欧美性片在线观看 |
亚洲国产高潮在线观看 |
国产精品免费区二区三区观看 |
欧美高清视频在线播放 |
欧美日韩三级一区二区 |
欧美成人黄色小视频 |
国产精品国色综合久久 |
亚洲第一精品影视 |
国产真实乱偷精品视频免 |
亚洲美女诱惑 |
亚洲国产精品va在线观看黑人 |
一区二区三区四区五区精品视频 |
狠狠色狠狠色综合系列 |
欧美一区二区在线免费播放 |
一本一本久久a久久精品综合妖精
一本一本久久a久久精品综合麻豆
|
伊人成年综合电影网 |
亚洲一区二区三区视频播放 |
亚洲一级电影 |
欧美日韩在线视频一区 |
99re热精品 |
久久精品视频在线观看 |
国产精品日韩在线 |
久久精品国产99精品国产亚洲性色 |
午夜精品久久久久久久99樱桃 |
欧美日韩一区二区视频在线 |
亚洲网站在线 |
久久亚洲精品一区二区 |
亚洲九九九在线观看 |
欧美日韩免费一区二区三区 |
中国女人久久久 |
欧美**字幕 |
亚洲一区免费网站 |
黄色日韩网站 |
欧美日韩午夜剧场 |
久久久久在线观看 |
亚洲免费av网站 |
欧美激情中文字幕乱码免费 |
亚洲午夜一区二区三区 |
久久亚洲精品伦理 |
午夜精品久久久久久99热软件 |
国产一区二区三区丝袜 |
欧美日韩精品在线播放 |
久久久久网址 |
亚洲一区二区免费 |
欧美成人精品 |
久久综合激情 |
久久野战av |
久久精品人人做人人爽 |
亚洲精品一区久久久久久 |
亚洲第一区在线 |
亚洲国产成人久久综合一区 |
禁断一区二区三区在线 |
国产精品中文字幕在线观看 |
欧美精品日韩一本 |
噜噜噜在线观看免费视频日韩 |
亚洲手机视频 |
亚洲欧美偷拍卡通变态 |
一区二区国产精品 |
99精品福利视频 |
午夜精品视频在线观看 |
国产精品99久久久久久www |
亚洲看片网站 |
亚洲欧美国产日韩中文字幕 |
欧美亚洲视频在线观看 |
午夜精品视频一区 |
小黄鸭精品aⅴ导航网站入口 |
一本色道久久99精品综合
|
欧美精品v日韩精品v韩国精品v
|
欧美视频二区 |
国产精品日韩在线 |
亚洲欧美高清 |
久久久久久一区二区 |
性做久久久久久免费观看欧美 |
欧美综合激情网 |
欧美精品一区二区三区蜜桃 |
国产精品大片 |
精品二区视频 |
一区二区三区四区五区精品视频 |
一区二区三区欧美成人 |
玖玖玖国产精品 |
亚洲福利视频二区 |
亚洲免费在线视频一区 二区 |
欧美一区二区三区免费看
|
一区二区欧美日韩视频 |
欧美亚洲在线视频 |
亚洲巨乳在线 |
麻豆91精品91久久久的内涵 |
国产精品一二三四 |
中文精品在线 |
亚洲风情在线资源站 |
欧美一区二区女人 |
国产精品日韩一区 |
一区二区三区免费在线观看 |
欧美不卡视频一区发布 |
久久免费视频观看 |
亚洲电影在线播放 |
美女免费视频一区 |
久久国产一区二区三区 |
国产一区再线 |
久久av二区 |
欧美一区二区私人影院日本
|
亚洲专区在线视频 |
一区二区三区四区国产 |
欧美精品一卡二卡 |
亚洲欧美日韩视频一区 |
性高湖久久久久久久久 |
国产一区二区三区精品欧美日韩一区二区三区
|
在线视频日韩精品 |
亚洲国产精品电影 |
欧美日韩精品免费看 |
国产精品99久久久久久有的能看 |
亚洲精品久久视频 |
欧美视频在线不卡 |
亚洲中无吗在线 |
香蕉久久一区二区不卡无毒影院
|
午夜精品久久久久久久99水蜜桃
|
欧美三日本三级三级在线播放 |
日韩视频亚洲视频 |
欧美伊人久久 |
av成人福利 |
久久久噜噜噜久久人人看 |
一本不卡影院 |
久久亚洲国产成人 |
亚洲免费在线电影 |
欧美男人的天堂 |
蜜臀久久99精品久久久画质超高清
|