日期:2014-05-18  浏览次数:20698 次

_CommandPtr等 的意义?


在用ADO来进行数据库操作的时候,

看到要用到一些

_ParameterPtr,_CommandPtr,_RecordsetPtr,_ConnectionPtr

这几个类, 一直搞不清他们的意义和使用方法。

我们要怎么来使用他们, 他们又有哪些使用功能呢?

希望各位大大给解析,解析一下, 谢谢@


------解决方案--------------------
单从这几个单词也能猜个差不多
_ParameterPtr,--是sql语句中的参数
_CommandPtr,--是要提交的sql查询字符串
_RecordsetPtr,--是查询返回的结果
_ConnectionPtr --是连接

似乎上面的都是指针类型。。。
------解决方案--------------------
_ConnectionPtr链接集链接即打开数据库

m_SqlConnection.CreateInstance("ADODB.Connection");
// strWay="driver={SQL Server};Server=" + sqlname + ";DATABASE=MyDataBase;UID=" + sqluser + ";PWD=" + sqlpass;
strWay="driver={SQL Server};Server=" + sqlname + ";DATABASE=调度信息库";
m_SqlConnection->ConnectionTimeout = 10;//设置超时时间为10秒
m_SqlConnection->CursorLocation = adUseClient;
m_SqlConnection->Open((_bstr_t)strWay,(_bstr_t)sqluser,(_bstr_t)sqlpass,adModeUnknown);

_RecordsetPtr 记录集打开数据表(中的记录)

m_SqlRecordset.CreateInstance("ADODB.Recordset");
m_SqlRecordset->Open((_variant_t)("SELECT * FROM 城市表 WHERE 省份='"+str+"' AND 城市 IS NOT NULL"),
(IDispatch*)m_SqlConnection,
adOpenStatic,
adLockOptimistic,
adCmdText);


_CommandPtr 命令集打开数据表即执行命令
m_pCommand.CreateInstance("ADODB.Command");
m_pCommand->ActiveConnection = m_SqlConnection;
m_pCommand->CommandType=adCmdText; 

vNULL.vt = VT_ERROR;
vNULL.scode = DISP_E_PARAMNOTFOUND;


sprintf(buf,"DELETE FROM 接收短信 WHERE ID=%d",index);
m_pCommand->CommandText=buf; //命令字串。
m_pCommand->Execute(&vNULL,&vNULL,adCmdText);///执行命令。



_ParameterPtr 参数集主要用于存储过程

_ParameterPtr param;
param=m_pCommand->CreateParameter(_bstr_t("@user"),adVarChar,adParamInput,20);
param->Value=_variant_t(logname);.
m_pCommand->Parameters->Append(param);

_variant_t vNULL;
vNULL.vt = VT_ERROR;
vNULL.scode = DISP_E_PARAMNOTFOUND;
m_pCommand->Execute(&vNULL,&vNULL,adCmdStoredProc);


建议用属性更简单
m_pCommand->Parameters->Refresh();
m_pCommand->Parameters->Item["@user"]->Value=_variant_t(logname);
m_pCommand->Parameters->Item["@operation"]->Value=_variant_t(operation);
m_pCommand->Parameters->Item["@oper_type"]->Value=_variant_t(oper_type);

再如:

//四种操作字段的写入方法
m_pRecordset->Collect["名称"] = _variant_t(m_strName);
// m_pRecordset->Fields->Item["名称"]->Value = _variant_t(m_strName);
// m_pRecordset->PutCollect("名称", _variant_t(m_strName));
// m_pRecordset->GetFields()->GetItem("名称")->PutValue(_variant_t(m_strName));

//四种操作字段的读取方法
m_cmbCity.AddString((_bstr_t)m_SqlRecordset->Collect["城市"]);
// m_cmbCity.AddString((_bstr_t)m_SqlRecordset->Fields->Item["城市"]->Value);
// m_cmbCity.AddString((_bstr_t)m_SqlRecordset->GetCollect("城市"));
// m_cmbCity.AddString((_bstr_t)m_SqlRecordset->GetFields()->GetItem("城市")->GetValue());



------解决方案--------------------
m_SqlRecordset.CreateInstance("ADODB.Recordset");
m_SqlRecordset->CursorLocation = adUseClient;
m_SqlRecordset->Open(_variant_t(str),
_variant_t((IDispatch*)m_SqlConnection),
adOpenStatic,
adLockOptimistic,
adCmdText)