VC++ ADO调用存储过程方法
2012-10-20 23:06
375 查看
约定:
斜体字体表示可变部分 斜体
红色字体表示固定部分 红体
以下步骤的前提条件:COM
ADO库已初始化,已经设置_ConnectionPtr连接对象。
_CommandPtr pCommand;
pCommand.CreateInstance(__uuidof(Command));
1)设置连接字符串
pCommand->ActiveConnection = < _ConnectionPtr 类型的变量>;//连接字符串
例如:pCommand->ActiveConnection = m_OraDateBase.m_pConnection;
2) 标记该操作为存储过程 (如果存储过程输出参数为记录集,忽略此步骤)
pCommand->CommandType = adCmdStoredProc;
3)设置PLSQLRSet属性(如果存储过程输出参数不是记录集,忽略此步骤)
pCommand->Properties->GetItem("PLSQLRSet")->Value = true;
1) 创建 _ParameterPtr对象并初始化
_ParameterPtr pParam;
pParam.CreateInstance(__uuidof(Parameter));
2)设置_ParameterPtr对象的变量相关参数
pParam = pCommand->CreateParameter(<变量名称>,
<变量类型>,
<创建类型>,
<变量大小>);
<变量名称> : 这个名称会在取数据的时候用到
<变量类型> :变量类型可以参考以下网页:
http://school.it168.com/special/manual/ado/index.htm?url=/special/manual/ado/html/mdidxparametervcppsyntax.htm
<创建类型>:输入参数为:adParamInput 输出参数为:adParamOutput
<变量大小> :例如int为4 ,
字符串为字符串的长度
例如:
pParam = pCommand->CreateParameter(_bstr_t("GAMEID"),
adInteger,
adParamInput,
4);
pParam = pCommand->CreateParameter(_bstr_t("val"),
adInteger,
adParamOutput,
4);
3)设置传入的变量值 (如果是输出参数忽略此步骤)
pParam->Value = _variant_t(< 变量值>);
< 变量值> : 要设置的数值
4)加入到Command对象的参数集属性中
pCommand->Parameters->Append(< 参数对象名>);
例如:
pCommand->Parameters->Append(pParam);
1) 设置要调用的存储过程名称
pCommand->CommandText = _bstr_t(<存储过程名称>(?));
<存储过程名称>:为数据库中存储过程的名称
?的个数为输入参数的个数,例如有三个输入参数,调用格式如下:
pCommand->CommandText = _bstr_t(<存储过程名称>(?,?,?));
如下图:
3) 执行调用
<记录集对象指针> =
pCommand->Execute(NULL,NULL,adCmdStoredProc
| adCmdUnspecified);
例如:
m_OraDateBase.m_pTempRecord = pCommand->Execute(NULL,NULL,adCmdStoredProc | adCmdUnspecified);
1) 设置要调用的存储过程名称
pCommand->CommandText = _bstr_t(<存储过程名称>);
<存储过程名称>:为数据库中存储过程的名称
如下图:
例如:
pCommand->CommandText = _bstr_t("RP_KEYWORDS_STATISTICS");
2) 执行调用
pCommand->Execute(NULL,NULL,adCmdStoredProc);
<变量名> = pCommand->Parameters->GetItem(<输出参数名>)->GetValue();
<变量名> :为C++中接收输出值的变量名
<输出参数名> :为设置输出参数时设置的变量名称
存储过程代码:
create or replace procedure RP_KEYWORDS_STATISTICS
(
v_keywords varchar2
)
IS
num number;
begin
select count(*) into num from t_keywords where c_keycontent=v_keywords;
if num=0 then
insert into t_keywords select sequence_keywords.nextval,v_keywords,1 from dual;
elsif num>0 then
update t_keywords set i_num=i_num+1 where c_keycontent=v_keywords;
end if;
commit;
end RP_KEYWORDS_STATISTICS;
C++ADO调用代码:
void CExecuteSql::LogUserSearchKey(std::string strKey)
{
std::string strProcName;
_CommandPtr pCommand;
int iExpVal;
try {
pCommand.CreateInstance(__uuidof(Command));
pCommand->ActiveConnection = m_OraDateBase.m_pConnection;//连接字符串
pCommand->CommandType = adCmdStoredProc;//标记该操作为存储过程
_variant_t vt;
vt.SetString("2");
_ParameterPtr pParam, pParam1;
pParam.CreateInstance(__uuidof(Parameter));
pParam = pCommand->CreateParameter(_bstr_t("keyval"),adChar,adParamInput,strKey.length());//给参数设置各属性
pParam->Value = _variant_t( strKey.c_str()
);
pCommand->Parameters->Append(pParam);//加入到Command对象的参数集属性中
pCommand->CommandText = _bstr_t("RP_KEYWORDS_STATISTICS");//存储过程名
pCommand->Execute(NULL,NULL,adCmdStoredProc);
//iExpVal
= pCommand->Parameters->GetItem("val")->GetValue();
} catch (_com_error e)
{
CString m_strErrMsg;
m_strErrMsg.Format("LogUserSearchKey
failure!\r\n\r\n message error:%s\r\n\r\n",e.ErrorMessage());
printf("%s\n", m_strErrMsg.GetBuffer());
IsDatabaseClose();
iExpVal =
0;
//shGameCoin
= 0;
return ;
}
return ;
}
【参考】
程序中调用的ADO函数的具体可用参数值可参考以下文档:
Microsoft ADO 程序员参考
http://www.yesky.com/imagesnew/software/ado/index.html
C++中的Parameter类型和ADO的类型换转
http://blog.sina.com.cn/s/blog_53061af00100miqs.html
VC ADO
http://www.pconline.com.cn/pcedu/empolder/gj/vc/0507/653859.html
http://www.vckbase.com/document/viewdoc/?id=496
http://zhidao.baidu.com/question/87587746.html
http://bbs.blueidea.com/thread-2007722-1-1.html
http://hi.baidu.com/������01/blog/item/a5b0bd0873b9129d0b7b821d.html
本人转载出处:http://blog.sina.com.cn/s/blog_600ce18b0100urzx.html
斜体字体表示可变部分 斜体
红色字体表示固定部分 红体
以下步骤的前提条件:COM
ADO库已初始化,已经设置_ConnectionPtr连接对象。
步骤一: 创建 _CommandPtr 对象并初始化
_CommandPtr pCommand;pCommand.CreateInstance(__uuidof(Command));
步骤二:设置_CommandPtr 对象的属性
1)设置连接字符串pCommand->ActiveConnection = < _ConnectionPtr 类型的变量>;//连接字符串
例如:pCommand->ActiveConnection = m_OraDateBase.m_pConnection;
2) 标记该操作为存储过程 (如果存储过程输出参数为记录集,忽略此步骤)
pCommand->CommandType = adCmdStoredProc;
3)设置PLSQLRSet属性(如果存储过程输出参数不是记录集,忽略此步骤)
pCommand->Properties->GetItem("PLSQLRSet")->Value = true;
步骤三:设置存储过程的输入/输出参数(如果没有输入参数忽略此步骤)
1) 创建 _ParameterPtr对象并初始化_ParameterPtr pParam;
pParam.CreateInstance(__uuidof(Parameter));
2)设置_ParameterPtr对象的变量相关参数
pParam = pCommand->CreateParameter(<变量名称>,
<变量类型>,
<创建类型>,
<变量大小>);
<变量名称> : 这个名称会在取数据的时候用到
<变量类型> :变量类型可以参考以下网页:
http://school.it168.com/special/manual/ado/index.htm?url=/special/manual/ado/html/mdidxparametervcppsyntax.htm
<创建类型>:输入参数为:adParamInput 输出参数为:adParamOutput
<变量大小> :例如int为4 ,
字符串为字符串的长度
例如:
pParam = pCommand->CreateParameter(_bstr_t("GAMEID"),
adInteger,
adParamInput,
4);
pParam = pCommand->CreateParameter(_bstr_t("val"),
adInteger,
adParamOutput,
4);
3)设置传入的变量值 (如果是输出参数忽略此步骤)
pParam->Value = _variant_t(< 变量值>);
< 变量值> : 要设置的数值
4)加入到Command对象的参数集属性中
pCommand->Parameters->Append(< 参数对象名>);
例如:
pCommand->Parameters->Append(pParam);
步骤四: 执行存储过程(返回记录集的情况)
1) 设置要调用的存储过程名称pCommand->CommandText = _bstr_t(<存储过程名称>(?));
<存储过程名称>:为数据库中存储过程的名称
?的个数为输入参数的个数,例如有三个输入参数,调用格式如下:
pCommand->CommandText = _bstr_t(<存储过程名称>(?,?,?));
如下图:
3) 执行调用
<记录集对象指针> =
pCommand->Execute(NULL,NULL,adCmdStoredProc
| adCmdUnspecified);
例如:
m_OraDateBase.m_pTempRecord = pCommand->Execute(NULL,NULL,adCmdStoredProc | adCmdUnspecified);
步骤四: 执行存储过程(一般情况)
1) 设置要调用的存储过程名称pCommand->CommandText = _bstr_t(<存储过程名称>);
<存储过程名称>:为数据库中存储过程的名称
如下图:
例如:
pCommand->CommandText = _bstr_t("RP_KEYWORDS_STATISTICS");
2) 执行调用
pCommand->Execute(NULL,NULL,adCmdStoredProc);
步骤五:获取输出参数结果
<变量名> = pCommand->Parameters->GetItem(<输出参数名>)->GetValue();<变量名> :为C++中接收输出值的变量名
<输出参数名> :为设置输出参数时设置的变量名称
完整调用示例:
存储过程代码:create or replace procedure RP_KEYWORDS_STATISTICS
(
v_keywords varchar2
)
IS
num number;
begin
select count(*) into num from t_keywords where c_keycontent=v_keywords;
if num=0 then
insert into t_keywords select sequence_keywords.nextval,v_keywords,1 from dual;
elsif num>0 then
update t_keywords set i_num=i_num+1 where c_keycontent=v_keywords;
end if;
commit;
end RP_KEYWORDS_STATISTICS;
C++ADO调用代码:
void CExecuteSql::LogUserSearchKey(std::string strKey)
{
std::string strProcName;
_CommandPtr pCommand;
int iExpVal;
try {
pCommand.CreateInstance(__uuidof(Command));
pCommand->ActiveConnection = m_OraDateBase.m_pConnection;//连接字符串
pCommand->CommandType = adCmdStoredProc;//标记该操作为存储过程
_variant_t vt;
vt.SetString("2");
_ParameterPtr pParam, pParam1;
pParam.CreateInstance(__uuidof(Parameter));
pParam = pCommand->CreateParameter(_bstr_t("keyval"),adChar,adParamInput,strKey.length());//给参数设置各属性
pParam->Value = _variant_t( strKey.c_str()
);
pCommand->Parameters->Append(pParam);//加入到Command对象的参数集属性中
pCommand->CommandText = _bstr_t("RP_KEYWORDS_STATISTICS");//存储过程名
pCommand->Execute(NULL,NULL,adCmdStoredProc);
//iExpVal
= pCommand->Parameters->GetItem("val")->GetValue();
} catch (_com_error e)
{
CString m_strErrMsg;
m_strErrMsg.Format("LogUserSearchKey
failure!\r\n\r\n message error:%s\r\n\r\n",e.ErrorMessage());
printf("%s\n", m_strErrMsg.GetBuffer());
IsDatabaseClose();
iExpVal =
0;
//shGameCoin
= 0;
return ;
}
return ;
}
【参考】
程序中调用的ADO函数的具体可用参数值可参考以下文档:
Microsoft ADO 程序员参考
http://www.yesky.com/imagesnew/software/ado/index.html
C++中的Parameter类型和ADO的类型换转
http://blog.sina.com.cn/s/blog_53061af00100miqs.html
VC ADO
http://www.pconline.com.cn/pcedu/empolder/gj/vc/0507/653859.html
http://www.vckbase.com/document/viewdoc/?id=496
http://zhidao.baidu.com/question/87587746.html
http://bbs.blueidea.com/thread-2007722-1-1.html
http://hi.baidu.com/������01/blog/item/a5b0bd0873b9129d0b7b821d.html
本人转载出处:http://blog.sina.com.cn/s/blog_600ce18b0100urzx.html
相关文章推荐
- VC++ ADO调用存储过程方法
- delphi adodataset1 调用存储过程的方法
- delphi adodataset1 调用存储过程的方法
- sqlserver,获取调用存储过程返回数据的方法。
- .NET中统一的存储过程调用方法
- net中统一的存储过程调用方法
- 在sql2000中,一个存储过程中调用另一个存储过程的实现方法
- ibatis调用oracle的函数,存储过程的方法_IN_和OUT_游标
- .NET中统一的存储过程调用方法(收藏)
- NET中统一的存储过程调用方法
- entity framework core 调用存储过程和方法
- 关于使用 Hibernate 调用存储过程方法
- VC调用存储过程的通用方法(ORACLE篇)
- jdbc 调用 sql server 的存储过程时“该语句没有返回结果集”的解决方法
- 今天写了一个调用存储过程的方法
- Java中五中常用的调用存储过程方法
- mysql存储过程的调用方法
- oracle常用函数以及调用入参为record的存储过程的方法,
- 关于存储过程的ADO调用的一些心得(输出参数,返回值)
- 【ASP.NET开发】ADO.NET调用带输出参数的存储过程 分类: ASP.NET 2012-09-10 21:16 1261人阅读 评论(1) 收藏