很奇怪的问题,为什么delphi+MSDE(就是sql server 2000的免费版)会出现这麽奇怪的问题(关于存储器的)? (50

  • 主题发起人 主题发起人 wrksky
  • 开始时间 开始时间
W

wrksky

Unregistered / Unconfirmed
GUEST, unregistred user!
很奇怪的问题,为什么delphi+MSDE(就是sql server 2000的免费版)会出现这麽奇怪的问题(关于存储器的)? (50分)<br />本人的存储过程:
CREATE PROCEDURE test @Sname INT,@num int output
AS
begin
update Operators set Oexamin=@sname
set @num=@@rowcount
end
GO
在delphi中使用TADOStoredProc调用存储过程。
begin
......
adosp.Parameters.ParamByName('@Sname').value:=1;
adosp.Parameters.ParamByName('@num').value:=0;
adosp.ExecProc;
showmessage(inttostr(adosp.Parameters.ParamByName('@num').value));
...
end;
按说应该返回被更改的行数。可是每一次返回的都是0,但是我打开数据表,明明看到已经
有数据被更改了呀。他为什么会返回的是0??
是DELPHI的问题?我已经打过补丁了。(两个ADO的补丁)
 
SQL Server的存储过程本身就有返回值.
可以用return @@RowCount试试.
 
INT,@num int output
已经设置了output
你还在程序里初始化值,
adosp.Parameters.ParamByName('@num').value:=0;
恐怕问题就出在这里吧
 
不是,我只是在作一个试验,其实代码的意义不大,主要是发现解决问题。请帮我看看到底
是什么原因?
 
for dhl2001
'adosp.Parameters.ParamByName('@num').value:=0;
恐怕问题就出在这'
这个应该不是问题的所在。
 
只是在MSDE上会这样吗?
你可以在存储过程开始第一行加一句 set nocount off试试
 
‘set nocount off’
是什么意思,怎么加?
 
是一句SQL
加在存储过程的Begin语句后面
 
可以对设定为output的参数初始化吗?
不可以吧
 
同意楼上几位的观点,不应该对输出参数赋值
 
多人接受答案了。
 
后退
顶部