ADO学习(三)Command 对象
Command?對象
ADO?Command?對象用于執行面向數據庫的一次簡單查詢。此查詢可執行諸如創建、添加、取回、刪除或更新記錄等動作。如果該查詢用于取回數據,此數據將以一個?RecordSet?對象返回。這意味著被取回的數據能夠被?RecordSet?對象的屬性、集合、方法或事件進行操作。
Command?對象的主要特性是有能力使用存儲查詢和帶有參數的存儲過程。
屬性
| 屬性 | 描述 |
| ActiveConnection | 設置或返回包含了定義連接或?Connection?對象的字符串。 |
| CommandText | 設置或返回包含提供者(provider)命令(如?SOL?語句、表格名稱或存儲的過程調用)的字符串值。默認值為?""(零長度字符串)。 |
| CommandTimeout | 設置或返回長整型值,該值指示等待命令執行的時間(單位為秒)。默認值為?30。 |
| CommandType | 設置或返回一個?Command?對象的類型 |
| Name | 設置或返回一個?Command?對象的名稱 |
| Prepared | 指示執行前是否保存命令的編譯版本(已經準備好的版本)。 |
| State | 返回一個值,此值可描述該?Command?對象處于打開、關閉、連接、執行還是取回數據的狀態。 |
方法
| 方法 | 描述 |
| Cancel | 取消一個方法的一次執行。 |
| CreateParameter | 創建一個新的?Parameter?對象 |
| Execute | 執行?CommandText?屬性中的查詢、SQL?語句或存儲過程。 |
集合
| 集合 | 描述 |
| Parameters | 包含一個?Command?對象的所有?Parameter?對象。 |
| Properties | 包含一個?Command?對象的所有?Property?對象。 |
m_pConnection.CreateInstance(__uuidof(Connection));//創建連接對象實例
try?????????????????
{
//?打開本地Access庫AddressBook.mdb
m_pConnection->Open("Provider=SQLOLEDB.1;Password=123456;Persist?Security?Info=True;User?ID=sa;Initial?Catalog=CAMPUS;Data?Source=192.168.0.102","","",adModeUnknown);
//存儲過程名
_bstr_t?storproc("procname");
_bstr_t?name("1002");
_CommandPtr?pCommand;
pCommand.CreateInstance(__uuidof(Command));
pCommand->ActiveConnection=m_pConnection;
//指定CommandTexe屬性為存儲過程名
pCommand->CommandText=storproc;
//指定CommandType屬性為存儲過程類型
pCommand->CommandType=adCmdStoredProc;
//在給參數賦值前調用Refresh方法
pCommand->Parameters->Refresh();
//給存儲過程的參數賦值
pCommand->Parameters->Item[_variant_t((long)1)]->Value=_variant_t((LPCTSTR)name);
//執行存儲過程,返回_RecordsetPtr類型指針,因為在CommandText中指定了命令,在Execute方法中參數賦空值就可了
m_pRecordset=pCommand->Execute(NULL,NULL,adCmdStoredProc);
?
?
CString?SID,SNAME,TID;
_variant_t?vt;
while?(!m_pRecordset->adoEOF)
{
//SID=(_bstr_t)(m_pRecordset->Fields->GetItem(_variant_t("SID"))->Value);
vt?=?m_pRecordset->GetCollect("SID");
if?(vt.vt?!=?VT_NULL)?SID=(LPCSTR)_bstr_t(vt);
?
SNAME=(LPCSTR)(_bstr_t)(m_pRecordset->Fields->GetItem(_variant_t("SNAME"))->Value);
TID=(LPCSTR)(_bstr_t)(m_pRecordset->Fields->GetItem(_variant_t("TID"))->Value);
?
gConsoleLog.WriteLogInfo("%s--->%s--->%s",?SID,SNAME,TID);
?
m_pRecordset->MoveNext();
}
}
catch(_com_error?e)
{
AfxMessageBox(e.Description());
return;
}
存儲過程多參數的實例
BOOL CTestProDlg::LoadTestProInfo()
{
?/*創建和數據庫的連接*/
?CString strErr??= _T("") ;
?CString strUser??= _T("SCOTT") ;//用戶名
?CString strPassword = _T("zzcan728") ;//密碼
?CString strDSN??= _T("ORCL") ;//DSN
?_CommandPtr?pCommand = NULL ;
?/*創建訪問接口*/
?try
?{
??HRESULT hr = m_pConn.CreateInstance(__uuidof(Connection)) ;
??if (FAILED(hr))
???_com_raise_error(hr, NULL) ;
??CString strConnect ;
??strConnect.Format(_T("Provider=OraOLEDB.Oracle.1;Password=%s;Persist Security Info=True;PLSQLRSet=1;User ID=%s;Data Source=%s"), strPassword, strUser, strDSN) ;
??m_pConn->CommandTimeout = 5 ;
??m_pConn->ConnectionTimeout = 5 ;
??m_pConn->Open((_bstr_t)strConnect, "", "", 0) ;
??if (m_pConn == NULL)
???throw CString(_T("The m_pDBConnect haven't been created!")) ;
?}
?catch(_com_error){
??strErr = _T("數據庫訪問接口配置錯誤或數據庫連接失敗!");
??AfxMessageBox(strErr, MB_ICONEXCLAMATION) ;
??return FALSE ;
?}
?catch(...)
?{
??strErr = _T("建立數據訪問接口失敗,程序無法繼續運行!");
??AfxMessageBox(strErr, MB_ICONEXCLAMATION) ;
??return FALSE ;
?}
?/*訪問數據庫,執行存儲過程*/
?//設置傳遞的參數
?HRESULT hr ;
?CString strCommand = _T("sp_pro7") ;
?_RecordsetPtr pRst ;
?if (m_pConn == NULL)
??AfxMessageBox(_T("數據庫連接錯誤"), MB_ICONEXCLAMATION ) ;
?//ASSERT(m_pConn == NULL) ;
?if (m_pConn == NULL)
??AfxMessageBox(_T("數據庫連接錯誤"), MB_ICONEXCLAMATION ) ;
?try
?{
??if (FAILED(hr = pRst.CreateInstance(__uuidof(Recordset))))//創建_RecordSet對象實例
???_com_issue_error(hr) ;
??if ((FAILED(hr = pCommand.CreateInstance(__uuidof(Command)))))//創建Command對象實例
???_com_issue_error(hr) ;
??pCommand->ActiveConnection = m_pConn ;//將建立的連接賦值給pCommand
??pCommand->CommandType = adCmdStoredProc ;
??pCommand->CommandText = (LPCTSTR)strCommand ;//命令字符串
??_ParameterPtr pBookID;//BOOK ID
??_ParameterPtr pBookName;//書名
??_ParameterPtr pBookPublish;//出版社
??pBookID.CreateInstance(__uuidof(Parameter)) ;
??pBookName.CreateInstance(__uuidof(Parameter)) ;
??pBookPublish.CreateInstance(__uuidof(Parameter)) ;
??pBookID = pCommand->CreateParameter("id",adInteger,adParamInput,20,(_variant_t)"10");//給參數設置各屬性
??pCommand->Parameters->Append(pBookID);//加入到Command對象的參數集屬性中
??pBookName = pCommand->CreateParameter("Name",adVarChar,adParamInput,20,(_variant_t)"sanguoyanyi");
??pCommand->Parameters->Append(pBookName);
??pBookPublish = pCommand->CreateParameter("publish",adVarChar,adParamInput,20, (_variant_t)"安徽出版社");
??pCommand->Parameters->Append(pBookPublish);
??pRst = pCommand->Execute(NULL, NULL, adCmdStoredProc) ;
??return TRUE ;
?}
?catch(_com_error e)
?{
??AfxMessageBox(e.Description()) ;
??m_pConn->Close() ;
??CoUninitialize();
??return FALSE ;
?}
?return FALSE ;
}
?
總結
以上是生活随笔為你收集整理的ADO学习(三)Command 对象的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: static_cast, dynamic
- 下一篇: __declspec(novtable)