调用数据库存储过程出错,高手请进。。

mfcmaster 2008-01-07 10:28:18
我用SQL server定义的存储过程:

create proc messageAndReturnMaxid
@strContent varchar(150),
@maxId int output
as
begin
insert into message(content, msgtime) values (@strContent, GETDATE())
select @maxId=Max(mid) from message
end

我有Vc里的调用代码如下:

CoInitialize(NULL);
_ConnectionPtr pConn(__uuidof(Connection));
pConn->ConnectionString="Provider=SQLOLEDB.1;Persist Security Info=False;Server=(local);Uid=sa;Pwd=123;Database=HospitalDBS";
pConn->Open("", "", "", adConnectUnspecified);

int maxid=-1;
VARIANT varMaxid;
varMaxid.vt=VT_I2;
varMaxid.iVal=maxid;

_CommandPtr pCmd(__uuidof(Command));
_ParameterPtr pPar=NULL;//(__uuidof(Parameters))
pCmd->ActiveConnection=pConn;
pCmd->CommandType=adCmdStoredProc;
pCmd->CommandText="messageAndReturnMaxid";
pPar=pCmd->CreateParameter("content", adInteger, adParamOutput, sizeof(int), varMaxid);
pCmd->Parameters->Append(pPar);
pPar->Value=varMaxid;

pCmd->Execute(NULL, NULL, adCmdStoredProc);
// pConn->Execute("messageAndReturnMaxid", )
pConn->Close();
// pRstRet->Close();
// pRstRet.Release();
pConn.Release();
CoUninitialize();

各位高手帮我看看,我急用啊,是不是我调用存储过程时有什么错误?请尽量说得详细点。多谢啊。
...全文
53 点赞 收藏 8
写回复
8 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
shakaqrj 2008-01-08
连接有没有问题?
回复
mfcmaster 2008-01-08
对了,对了,果然是这样。。多谢 shakaqrj 和 handsomerun啊,问题解决了。。。
回复
shakaqrj 2008-01-08
Item[(long)1]->
试试看
回复
handsomerun 2008-01-08

你怎么用同一个pPar 去创建的阿
看一下这个吧

http://blog.csdn.net/handsomerun/archive/2007/07/28/1714598.aspx

var=pCmd-> Parameters-> Item[1]-> Value;
=》

var= pCmd->Parameters->GetItem(short(1))->Value;

或者
VretVal = pPar->Value;

这样试试呢?
回复
mfcmaster 2008-01-08
是啊,我也发现了。我改为:
pPar=pCmd->CreateParameter("strContent", adVarChar, adParamInput, sizeof(char[150]), (_variant_t)"Hello,World!");
pCmd->Parameters->Append(pPar);
pPar=pCmd->CreateParameter("maxId", adInteger, adParamOutput, sizeof(int), "");
pCmd->Parameters->Append(pPar);//得一个个添加参数
pPar->Value=varMaxid;
就不出错了。
我用这个来得到返回值,但出错了。
_variant_t var;
var=pCmd->Parameters->Item[1]->Value;
提示是: cannot convert parameter 1 from 'const int' to 'const class _variant_t &'
要怎么能够得到返回值啊?
回复
handsomerun 2008-01-08
你怎么只创建了一个参数

两个参数都是要的
回复
mfcmaster 2008-01-08
连接没有问题啊。
能不能给我连一下,我想在message里边的content字段中插入值,并且取回刚插入的最大mid号。
pPar=pCmd-> CreateParameter("content", adInteger, adParamOutput, sizeof(int), varMaxid);
pCmd-> Parameters-> Append(pPar);
pPar-> Value=varMaxid;
这样子能不能做到啊?
回复
mfcmaster 2008-01-07
分不多,但说的好的,我尽量加分。能尽快让我解决问题的,30分全给他。
回复
相关推荐
发帖
数据库
创建于2007-09-28

3954

社区成员

VC/MFC 数据库
申请成为版主
帖子事件
创建了帖子
2008-01-07 10:28
社区公告
暂无公告