如何得到存儲過程返回值呢? 100分

lliang0488 2003-10-09 06:02:41
如下存儲過程,@autocode 為根據日期進行自動編號,要返回這個編號

CREATE PROCEDURE [dbo].[update_po_head]

@code char(12),
@ddate datetime,
@prepared varchar(50),
@messrs varchar(50),
@attn varchar(50),
@delivery varchar(50),
@delivery_sch varchar(50),
@payment varchar(50),
@remark varchar(100),
@return char(15) OUTPUT
AS
if @code<>'NEW'
begin
update dbo.po_head set ddate=@ddate,prepared=@prepared,messrs=@messrs,attn=@attn,delivery=@delivery,delivery_sch=@delivery_sch,payment=@payment,remark=@remark where code=@code
end
else
begin
declare @autocode char(12)
select @autocode=max(code) from po_head --where code like rtrim(right(year(getdate()),2))+'%'

if @autocode is null
select @autocode='PW'+rtrim(right(year(getdate()),3))+'SC'+'00001'
else
begin
set @autocode=cast(right(rtrim(@autocode),5) as int)+1
set @autocode='CW'+rtrim(right(year(getdate()),3))+'SC'+rtrim(REPLICATE('0',5 - len(@autocode))+@autocode)
end

insert into dbo.po_head(code,ddate,prepared,messrs,attn,delivery,delivery_sch,payment,remark)
values(@autocode,@ddate,@prepared,@messrs,@attn,@delivery,@delivery_sch,@payment,@remark)
set @return=@autocode
end
GO
前端用VB,就是返不回值:
Dim cmdExecute As New ADODB.Command
'CN 是連接 connection對象,設為 aduserclient
strSQL = "'" & Trim(txtCode.Text) & "','" & Format(txtddate.Text, "YYYY/MM/DD") & "', " _
& " '" & txtprepared.Text & "','" & txtmessers.Text & "', " _
& " '" & txtattn.Text & "','" & txtdelivery.Text & "','" & txtDelivery_sch.Text & "','" & txtpayment.Text & "','" & txtremark.Text & "'"

strSQL = "update_po_head " & strSQL & ""

With cmdExecute
.ActiveConnection = CN
.CommandText = strSQL
.CommandType = adCmdText
.Parameters.Append .CreateParameter(, adChar, adParamOutput, 15)
End With
cmdExecute.Execute
請大家幫忙,
另想問一下,這種累加自動編號,是在客戶端完成呢,還是在服務器完成好呢,謝了
...全文
30 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
lliang0488 2003-10-10
  • 打赏
  • 举报
回复
我是想用 command 的 commandText 為一SQL 語句,不是存儲過程名,commandtype 為adcmdtext
With cmdExecute
.ActiveConnection = CN
.CommandText = strSQL
.CommandType = adCmdText
.Parameters.Append .CreateParameter(, adChar, adParamOutput, 15)
End With
cmdExecute.Execute
leimin 2003-10-09
  • 打赏
  • 举报
回复
http://expert.csdn.net/Expert/FAQ/FAQ_Index.asp?id=133244
leus 2003-10-09
  • 打赏
  • 举报
回复
同意在服务器端处理。取得返回值用大力的回答应该可以的,还可以显式的定义output的变量来取得,比较保险。
pengdali 2003-10-09
  • 打赏
  • 举报
回复
另想問一下,這種累加自動編號,是在客戶端完成呢,還是在服務器完成好呢,謝了

re: 在服务端可以减少网络的路由时间,且排除一切外界干扰如:网络不好等。
Reker熊 2003-10-09
  • 打赏
  • 举报
回复
better on server
txlicenhe 2003-10-09
  • 打赏
  • 举报
回复
dim strSQL as string
set strSQL = "
declare @a char(15)
exec update_po_head ...,@a output
select @a "
rs.open strSQL
messagebox rs.fields(0)
txlicenhe 2003-10-09
  • 打赏
  • 举报
回复
服务器端好。
伍子V5 2003-10-09
  • 打赏
  • 举报
回复
我觉得在服务器端要好一些,因为你最终还是要保存在服务器的数据库里面
不过如果你想减轻服务器负担,放在客户端也是有理由的
pengdali 2003-10-09
  • 打赏
  • 举报
回复
举例:


private sub
dim inSN as string '假定你用的序列号为字符串
dim outRet as long '假定你用的返值为整型
dim cnn as new connection
dim cmd as new command
dim param1 as new parameter
dim param2 as new parameter

on error goto Err
//建立数据库连接
cnn.connectionstring=你要的连接串
cnn.open
set cmd.activeconnection=cnn
//设置命令对象
cmd.commandtype=adcmdstoredprocedure
cmd.commandtext=你写的存储过程名
//添加参数对象
set param1=cmd.createparameter("insn",advarchar,adparaminput,50,inSN)
set param2=cmd.createparameter("RetVal",adinteger,adparamoutput)
cmd.parameters.append param1
cmd.parameters.append param2
//执行之
cmd.execute
//得到结果

OutRet=clng(param2) '得到你想要的返回值

exit sub
Err:
msgbox err.number & err.descrpition
end sub

34,590

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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