首页 VC_数据库ADO开发

VC_数据库ADO开发

举报
开通vip

VC_数据库ADO开发 VC???????? ADO? ??? 2007-8-30??????? ??ADO?? ADO(ActiveX Data Object)? Microsoft???????? ?????????? OLE DB????????????? ???????????? OLE DB?COM???????? ? ADO,???????????????????? ODBC API?DAO?RDO????????????????? ?????? VC????? ADO??????????? ???...

VC_数据库ADO开发
VC???????? ADO? ??? 2007-8-30??????? ??ADO?? ADO(ActiveX Data Object)? Microsoft???????? ?????????? OLE DB????????????? ???????????? OLE DB?COM???????? ? ADO,???????????????????? ODBC API?DAO?RDO????????????????? ?????? VC????? ADO??????????? ?????????? ?????? ?????? ?????????????????????????? ????????????????? ADO??????? ????? (1)??? COM???? ADO????? (2)? Connection??????? (3)??????????? Connection?Command??? ? SQL?????? Recordset???????????? ????? (4)?????????????? ????: ???????????????????? Access?? ??????????????????????? test.mdb? ????????????????????? ???COM????? ?????? AfxOleInit()???? COM???????? ? CWinApp::InitInstance()????????????? ??: BOOL CADOTest1App::InitInstance() { AfxOleInit(); ...... ????#import???? ADO??? ??? stdafx.h????????(stdafx.h?????? ????????? FileView?? Header Files???) #import "c:\program files\common files\system\ado\m sado15.dll" no_namespace rename("EOF","adoEOF") ?????????????????????#include ???????????????? msado15.tlh,ado15.tli?? C++?????? ADO?? ????: (1) ????? msado15.dll????????????? ????? (2) ????????????????????? MSDN ???????????????????? msado15.tlh(405) : warning C4146: unary minus opera tor applied to unsigned type, result still unsigned ????? Connection???????? ???????????? Connection?????: _ConnectionPtr m_pConnection; ???????????? Connection???????? ???????????? BOOL CADOTest1Dlg::OnInitDialog() { CDialog::OnInitDialog(); HRESULT hr; try { hr = m_pConnection.CreateInstance("ADODB.Connection ");///?? Connection?? if(SUCCEEDED(hr)) { hr = m_pConnection->Open("Provider=Microsoft.Jet.OL EDB.4.0;Data Source=test.mdb","","",adModeUnknown); ///????? ///??????????? Provider??? ACCESS2000 ?????? ACCESS97,??? ?:Provider=Microsoft.Jet.OLEDB.3.51; } } catch(_com_error e)///???? { CString errormessage; errormessage.Format("???????!\r\n??? ?:%s",e.ErrorMessage()); AfxMessageBox(errormessage);///?????? } ??????????? Connection??? Open???? ????????????????? HRESULT Connection15::Open ( _bstr_t ConnectionStri ng, _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); (3)??? DSN? SQL SERVER?????? ?? m_pConnection->Open("driver={SQL Server};Serve r=127.0.0.1;DATABASE=vckbase;UID=sa;PWD=139","","", adModeUnknown); ?? Server? SQL???????DATABASE????? Connection??? Open??????????????? Connection?????????? ConnectionTimeOut? State ConnectionTimeOut??????????????? Open ?????? ?: m_pConnection->ConnectionTimeout = 5;///??? ?????? m_pConnection->Open("Data Source=adotest;","","",ad ModeUnknown); State?????? Connection???????????? ?????????????????????????? ????: if(m_pConnection->State) m_pConnection->Close(); ///???????????? ? ????? SQL?????????? ?????????????????? Recordset??? ??:_RecordsetPtr m_pRecordset; ????? Recordset???? ?: m_pRecordset.CreateInstance("ADODB.Recordset"); SQL???????????????????????? (1)?? Connection??? Execute???? SQL?? Execute?????????: _RecordsetPtr Connection15::Execute ( _bstr_t Comma ndText, VARIANT * RecordsAffected, long Options ) ?? CommandText????????? SQL????? RecordsAffected????????????, ?? Options?? CommandText???????Options??? ?????? adCmdText:?? CommandText????? adCmdTable:?? CommandText????? adCmdProc:?? CommandText??????? adCmdUnknown:?? Execute?????????????????????? ?????????? _variant_t RecordsAffected; ///?? SQL???CREATE TABLE???? users,users? ???????? ID,??? username,?? old,??? birthday m_pConnection->Execute("CREATE TABLE users(ID INTEG ER,username TEXT,old INTEGER,birthday DATETIME)",&R ecordsAffected,adCmdText); ///????????? m_pConnection->Execute("INSERT INTO users(ID,userna me,old,birthday) valueS (1, ''''''''Washington''''' ''',25,''''''''1970/1/1'''''''')",&RecordsAffected, adCmdText); ///????? old?????? 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 );///??????????? vCount?? m_pRecordset->Close();///????? CString message; message.Format("??%d???",vCount.lVal); AfxMessageBox(message);///???????? (2)?? Command????? SQL?? _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,ad CmdText);///?????????? ??????????? Command?????? SELECT? ????Command?????????????????? ??????????????? (3)??? Recordset??????????? ?? m_pRecordset->Open("SELECT * FROM users",_variant_t ((IDispatch *)m_pConnection,true),adOpenStatic,adLo ckOptimistic,adCmdText); Open?????????: HRESULT Recordset15::Open ( const _variant_t & Sour ce, const _variant_t & ActiveConnection, enum Curso rTypeEnum CursorType, enum LockTypeEnum LockType, l ong Options ) ??? ?Source???????? ?ActiveConnection??????????????? Connection?????????_variant_t??) ?CursorType???????????????????? ???: enum CursorTypeEnum { adOpenUnspecified = -1,///?????? adOpenForwardOnly = 0,///????????????? ??????????? MoveNext??????????? ?????????? BookMark,RecordCount,AbsolutePosition,AbsolutePage ????? adOpenKeyset = 1,///??????????????? ?????????????????????????? ???? adOpenDynamic = 2,///??????????????? ??????????????? adOpenStatic = 3///???????????????? ?????????????????????????? ????????? }; ?LockType????????????????????? ??? enum LockTypeEnum { adLockUnspecified = -1,///??? adLockReadOnly = 1,///????? adLockPessimistic = 2,??????????????? ????????????????? adLockOptimistic = 3,????????????? Update?????????????????????? ?????????? adLockBatchOptimistic = 4????????????? ???????????????????????? }; ?Options??????? Connection??? Execute?? ??? ???????????? ?????????? SQL?????? users????? ????:ID,username,old,birthday ?????????????????????????? ??????????????????????????? ??????? _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,adLoc kOptimistic,adCmdText); while(!m_pRecordset->adoEOF)///?????? adoEOF? ?? EOF????? rename("EOF","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"); ///? DEBUG???? 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,vOl d.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+1 0))); m_pRecordset->PutCollect("username",_variant_t("? ??")); m_pRecordset->PutCollect("old",_variant_t((long)71) ); m_pRecordset->PutCollect("birthday",_variant_t("193 0-3-15")); } m_pRecordset->Move(1,_variant_t((long)adBookmarkFir st));///?????????????????????? ??? m_pRecordset->PutCollect(_variant_t("old"),_variant _t((long)45));///????? m_pRecordset->Update();///????? ??????????? ?????????? Close????? m_pRecordset->Close();///????? m_pConnection->Close();///???? ??????????? ADO????????????? ?????????????????????????? ?????????????? ADO,?????????? ??????????????????????????? ???????? ????????? ??????? ADO????????????????? ???? Recordset????????????????? ??????????????????????????? ????????????????????????? //------------------------------------------------- ------------------------------------- ?????? ? vc????? ADO?????? ?? #import "msado15.dll" no_namespace rename("EOF","AD OEOF") ??"msado15.dll"???? ???????? _ConnectionPtr m_AdoCon?????? ???????????? ??????? _bstr_t connString; //????? try { connString = _T("Provider=MSDASQL.1;Data Source=kon g;Persist Security Info=False"); m_AdoCon.CreateInstance(__uuidof(Connection));//??? m_AdoCon->Open(connString, "", "", -1); } catch (_com_error& comerr) { IErrorInfo* pErrorInfo = comerr.ErrorInfo(); HRESULT hr = comerr.Error(); if (pErrorInfo) { BSTR bsDesc = NULL; pErrorInfo->GetDescription( &bsDesc ); _bstr_t sDesc( bsDesc, false ); AfxMessageBox(sDesc.operator LPCTSTR()); pErrorInfo->Release(); } } ???? CString strIp, SQL_STR, strTemp, strResult; UINT port; _RecordsetPtr AdoRst; //RecordSet? ?? _StreamPtr AdoStream; //Ado??? SQL_STR = m_strText; //SQL?? if (m_AdoCon->State == adStateClosed) //????? ????? { strTemp = "Ado connection hasn't set up."; m_pWnd->SendMessage(WM_FRESHWATCHLIST, (WPARAM)(&st rTemp)); SendMsg(strTemp, FALSE); return; } try { //Create Recordset Interface AdoRst.CreateInstance(__uuidof(Recordset)); AdoRst->Open((LPCTSTR)SQL_STR, m_AdoCon.GetInterfac ePtr(), adOpenDynamic,adLockOptimistic,adCmdUnknown); //?????? SQL?SQL_STR??? if (strTemp != "SELECT") strResult =_T("OK!"); else { //Save the xmlResult to strResult AdoStream.CreateInstance(__uuidof(Stream)); // AdoRst->Save(AdoStream.GetInterfacePtr(), adPersist XML); strResult = ((BSTR)AdoStream->ReadText(adReadAll)); //??? XML?? } } catch (_com_error& comerr) { //catch the COM exception IErrorInfo* pErrorInfo = comerr.ErrorInfo(); HRESULT hr = comerr.Error(); if (pErrorInfo) { BSTR bsDesc = NULL; pErrorInfo->GetDescription( &bsDesc ); _bstr_t sDesc( bsDesc, false); strResult = sDesc.operator LPCTSTR(); pErrorInfo->Release(); } } 5.??????? GetCollect?? int nItem; _variant_t vUsername,vBirthday,vID,vOld; try { m_pRecordset.CreateInstance("ADODB.Recordset"); m_pRecordset->Open("SELECT * FROM users",_variant_t ((IDispatch*)theApp.m_pConnection,true),adOpenStati c,adLockOptimistic,adCmdText); m_bSuccess = TRUE; while(!m_pRecordset->adoEOF) { vID = m_pRecordset->GetCollect("ID"); vUsername = m_pRecordset->GetCollect("username"); vOld = m_pRecordset->GetCollect("old"); vBirthday = m_pRecordset->GetCollect("birthday"); nItem=m_userlist.InsertItem(0xffff,(_bstr_t)vID); m_userlist.SetItem(nItem,1,1,(_bstr_t)vUsername,NUL L,0,0,0); m_userlist.SetItem(nItem,2,1,(_bstr_t)vOld,NULL,0,0 ,0); m_userlist.SetItem(nItem,3,1,(_bstr_t)vBirthday,NUL L,0,0,0); m_pRecordset->MoveNext(); } } 6.???? PutCollect() if(!m_pRecordset->adoEOF && m_nCurrentSel >= 0 && m _bAutoSave) { vUserID = (long)m_nUserID; vUsername = m_sUsername; vOld = (long)m_nOld; vBirthday = m_tBirthday; m_pRecordset->PutCollect("ID",vUserID); m_pRecordset->PutCollect("username",vUsername); m_pRecordset->PutCollect("old",vOld); m_pRecordset->PutCollect("birthday",vBirthday) } //------------------------------------------------- ------------------------------------- ? ado??? access????? void OpenSchemaX(TCHAR *TableName) { HRESULT hr = S_OK; IADORecordBinding *picRs = NULL; _RecordsetPtr pRstSchema("ADODB.Recordset"); _ConnectionPtr pConnection("ADODB.Connection" ); pConnection->ConnectionString = TableName; pConnection->Provider = "Microsoft.Jet.OLEDB.4.0"; try { pConnection->Open(pConnection->ConnectionString, "" , "", adModeUnknown); pRstSchema->QueryInterface( __uuidof(IADORecordBinding), (LPVOID*)&pi cRs); pRstSchema = pConnection->OpenSchema(adSche maTables);//???????? while(!(pRstSchema->EndOfFile)) { CString strTableType; _bstr_t table_name = pRstSchema->Fields -> GetItem("TABLE_NAME")->Value;//?? ???? _bstr_t table_type = pRstSchema->Fields -> GetItem("TABLE_TYPE")->Value;//?? ???? strTableType.Format("%s",(LPCSTR) table _type); if(!lstrcmp(strTableType,_T("TABLE"))) { m_cbTeam.AddString((LPCSTR) table_name);//???? ?? } pRstSchema->MoveNext(); } // Clean up objects before exit. pRstSchema->Close(); pConnection->Close(); } catch (_com_error &e) { // Notify the user of errors if any. // Pass a connection pointer accessed from the Connection. PrintProviderError(pConnection); PrintComError(e);
本文档为【VC_数据库ADO开发】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_181549
暂无简介~
格式:pdf
大小:133KB
软件:PDF阅读器
页数:27
分类:建筑/施工
上传时间:2013-04-21
浏览量:38