標籤:vs2010 資料庫
實現VS2010串連SQL Server 2008操作與編程,主要記錄的是一個學習的過程。
實現VS2010串連SQL Server 2008:逗逗飛的專欄
實現VS2010串連SQL Server 2008代碼:點擊開啟連結
ADO的三個指標:
_ConnectionPtr:用於建立資料庫的串連。 _RecordsetPtr:它是專門為通過記錄集操作資料庫而設立的指標,通過該介面可以對資料庫的表內的記錄、欄位等進行各種操作。 _CommandPtr:提交的sql查詢字串指標
目的:串連資料庫,實現對資料庫的串連,讀取操作。結果如下所示:
圖:sql資料庫
圖:VS2010運行結果
需要的標頭檔#import "C://Program Files//Common Files//System//ado//msado15.dll" no_namespace <span style="font-family: Arial, Helvetica, sans-serif;">rename("EOF","adoEOF")rename("BOF","adoBOF")</span>
用到的三個變數_ConnectionPtr m_pConnection; // 資料庫_RecordsetPtr m_pRecordset; // 命令_CommandPtr m_pCommand; // 記錄
串連資料庫void CtestDlg::OnBnClickedConnect(){// TODO: 在此添加控制項通知處理常式代碼::CoInitialize(NULL); //初始化OLE/COM庫環境 HRESULT hr = NULL;try{hr = m_pConnection.CreateInstance(_uuidof(Connection));//建立連線物件執行個體if (SUCCEEDED(hr)){m_pConnection->ConnectionString =("Provider = SQLOLEDB.1; Persist Security Info = False;User ID = ARP; Password=123456; Initial Catalog = school; Data Source = (local)");hr = m_pConnection->Open("", "", "", adConnectUnspecified);//開啟資料庫if (FAILED(hr)){AfxMessageBox(_T("Open Failed!"));}}else{AfxMessageBox(_T("Create instance of connection failed!"));}}catch (_com_error e){CString temp;temp.Format(_T("資料庫連接錯誤\r\n錯誤資訊為:%s"), e.ErrorMessage());AfxMessageBox(temp);}}
查詢資料庫void CtestDlg::OnBnClickedAdd(){// TODO: 在此添加控制項通知處理常式代碼try{m_pRecordset.CreateInstance("ADODB.Recordset"); m_pRecordset->Open("select sno, cno, grade from sc",_variant_t((IDispatch*)m_pConnection, true), adOpenStatic, adLockOptimistic, adCmdText);}catch (_com_error &e){AfxMessageBox(e.Description());}_variant_t sno, cno, grade;try{int num = m_list.GetItemCount();while (!m_pRecordset->adoEOF){CString sno= (_bstr_t)(m_pRecordset->Fields->GetItem(_variant_t("sno"))->Value);CString cno = (_bstr_t)(m_pRecordset->Fields->GetItem(_variant_t("cno"))->Value);CString grade = (_bstr_t)(m_pRecordset->Fields->GetItem(_variant_t("grade"))->Value);m_list.InsertItem(num, sno);m_list.SetItemText(num, 1, cno);m_list.SetItemText(num , 2, grade);num++;m_pRecordset->MoveNext();}}catch (_com_error &e){AfxMessageBox(e.Description());}}
插入資料(不帶參數)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(); }//trycatch (_com_error &e){::MessageBox(NULL, "又出毛病了。","提示",MB_OK │ MB_ICONWARNING);}
刪除資料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(); }}//trycatch (_com_error &e){::MessageBox(NULL,"又出毛病了。","提示",MB_OK │ MB_ICONWARNING);}
VS2010串連SQL Server 2008操作與編程 (筆記)