求VC中mfc,用ADO调用带返回参数的存储过程,的源代码程序

Tscholar 2005-04-28 04:56:44
如题,哪位仁兄有,请发一份,如可用,150分程上,,,,,
请附上使用说明,用得是mfc
假设存储过程为:

CREATE PROCEDURE testproc
(@ta int,
@tb int output)
AS
select * from test where a=@ta
GO

表test为:
int a,int b

邮箱:zbdxyz_379@sohu.com
...全文
207 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
Tscholar 2005-04-29
  • 打赏
  • 举报
回复
呵呵,不好意思,丢脸了,果然是没给tb赋值,非常感谢哈~~~
Tscholar 2005-04-29
  • 打赏
  • 举报
回复
bb=(long)cmmd->Parameters->GetItem("tb")->GetValue();
好像是这一句出现问题,你定义的
tb=m_pCmd->Parameters->GetItem("tb")->GetValue();是_variant_t类型的吗?
怎么得到值为0阿?按说输入参数3,输出参数应该是33的(在test记录是这样的)
Fzergling 2005-04-29
  • 打赏
  • 举报
回复
程序运行有没有异常?断点跟踪没出现问题的话,你的存储过程怎么写的?
CREATE PROCEDURE testproc
(@ta int,
@tb int output)
AS
select * from test where a=@ta
GO
tb在哪被赋值呢?
Tscholar 2005-04-29
  • 打赏
  • 举报
回复
怎么贴出来代码这么乱了~~
Tscholar 2005-04-29
  • 打赏
  • 举报
回复
我的是SQLServer,我用得代码如下,执行语句可以成功的(就是连上了),参数注释的几种类型都试过,不行哦~!~~
CoInitialize(NULL);
_ConnectionPtr pConn;
try
{
if (FAILED(pConn.CreateInstance(__uuidof(Connection))))
{
AfxMessageBox("Create Instance failed!");
return;
}


if (FAILED(pConn->Open("Driver=SQL Server;Server=server;Database=yhsysdb;UID=sa;PWD=","","",-1)))
{
AfxMessageBox("Can not open Database!");
pConn.Release();
return;
}
// COleVariant vtOptional((long)DISP_E_PARAMNOTFOUND,VT_ERROR);

// pConn->Execute(_bstr_t("insert into test values(8, 88)"), &vtOptional,- 1); //执行语句

_CommandPtr cmmd;
HRESULT hr = cmmd.CreateInstance(__uuidof(Command));
if(FAILED(hr))
{
AfxMessageBox("NewNetDatabase()中创建_CommandPtr对象失败");
return;
}

_ParameterPtr param;
char m_strDesp[50];
long aa = 0, bb = 0, ret = 0;
cmmd->CommandText=_bstr_t("testproc");
cmmd->ActiveConnection = pConn;
cmmd->CommandType=adCmdStoredProc;

param = cmmd->CreateParameter("ta", adInteger, adParamInput,
sizeof(int), _variant_t((long)3)); //, _variant_t(aa)
cmmd->Parameters->Append(param);

param = cmmd->CreateParameter("tb", adInteger, adParamOutput,
sizeof(int), _variant_t(bb));
//_variant_t((long)0)//; //, _variant_t(bb)
cmmd->Parameters->Append(param);

cmmd->Execute(NULL, NULL, adCmdStoredProc);
bb=(long)cmmd->Parameters->GetItem("tb")->GetValue();
cmmd.Detach();
}
catch (_com_error e)
{
TRACE(_T("Warning: %s\n"), e.ErrorMessage());
}
Fzergling 2005-04-29
  • 打赏
  • 举报
回复
我就这么写的,没问题,你设个断点单步调试一下看看,那个参数是传进去的0:OUTPUT的,你的数据库是SQLServer吗?
Tscholar 2005-04-29
  • 打赏
  • 举报
回复
你自己有试过?成功了吗,我见网上都这么写的,可是在程序里就是不成功
所以希望能直接写成小程序,发给我
还有:
m_pParam=m_pCmd->CreateParameter("tb",adInteger,adParamOutput,sizeof(int),0);
输出参数的值怎么写个0阿?这样编译通不过阿~~~~
Fzergling 2005-04-29
  • 打赏
  • 举报
回复
m_pParam=m_pCmd->CreateParameter("tb",adInteger,adParamOutput,sizeof(int),"");
最后一个参数应该是0,整形的,写错鸟
m_pParam=m_pCmd->CreateParameter("tb",adInteger,adParamOutput,sizeof(int),0);
Fzergling 2005-04-29
  • 打赏
  • 举报
回复
try{
_CommandPtr m_pCmd;
m_pCmd.CreateInstance(__uuidof(Command));
m_pCmd->ActiveConnection=m_pConn;

m_pCmd->CommandText="testproc";
m_pCmd->CommandType=adCmdStoredProc;

m_pParam=m_pCmd->CreateParameter("ta",adInteger,adParamInput,sizeof(int),ta);
m_pCmd->Parameters->Append(m_pParam);

m_pParam=m_pCmd->CreateParameter("tb",adInteger,adParamOutput,sizeof(int),"");
m_pCmd->Parameters->Append(m_pParam);

m_pCmd->Execute(NULL,NULL,adCmdStoredProc);

tb = m_pCmd->Parameters->GetItem("tb")->GetValue();

m_pCmd.Detach();
}end_catch_com_ret(FALSE)
Tscholar 2005-04-29
  • 打赏
  • 举报
回复
没人会?还是嫌分少?可以再开贴给的阿~~~`
Tscholar 2005-04-28
  • 打赏
  • 举报
回复
沉的好快啊
Tscholar 2005-04-28
  • 打赏
  • 举报
回复
不好意思,最多只能给100分,上面写错了

4,012

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 数据库
社区管理员
  • 数据库
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧