如何返回sql server中存储过程中return 的值(100分)

  • 主题发起人 主题发起人 stow
  • 开始时间 开始时间
S

stow

Unregistered / Unconfirmed
GUEST, unregistred user!
存储过程如下:
CREATE PROCEDURE authors_test
@flag char(1)
/*可以在这里加入参数*/
as
if @flag=1
begin
return 1
end
else if @flag=2
begin
return 2
end
这个存储过程可以加入到任何地方,但是不知道怎样才能返存储过程中的1和2的值。
 
ADOStoredProc.Parameters[0]就是返回值
 
在查询分析器中可以这样:

declare @p int
exec @p=authors_test 1
print @p

在Delphi中可以这样:
procedure TForm1.Button1Click(Sender: TObject);
begin
ADOStoredProc1.Parameters.ParamByName('@flag').Value := 2;
ADOStoredProc1.ExecProc;
Caption := VarToStr(ADOStoredProc1.Parameters.ParamByName('@RETURN_VALUE').Value);
end;
 
用个参数就行了.
 
if ADOStoredProc1.Active then ADOStoredProc1.Close;
ADOStoredProc1.Parameters.CreateParameter('@flag',ftstring,pdinput,1,0);
ADOStoredProc1.Parameters.ParamByName('@flag').Value :='2';
ADOStoredProc1.Open ;
ADOStoredProc1.ExecProc ;
memo1.Lines.add(VarToStr(ADOStoredProc1.Parameters.ParamByName('@RETURN_VALUE').Value));

我写了这样的代码,没有实现,能不能给我再讲一讲啊
错误的地方:是说指定的参数太多
 
if ADOStoredProc1.Active then ADOStoredProc1.Close;
ADOStoredProc1.Parameters.CreateParameter('@flag',ftstring,pdinput,1,0);
ADOStoredProc1.Parameters.ParamByName('@flag').Value :='2';
ADOStoredProc1.Open ;
ADOStoredProc1.ExecProc ;
memo1.Lines.add(Caption :=
VarToStr(ADOStoredProc1.Parameters.ParamByName('@RETURN_VALUE').Value));

我写了这样的代码,没有实现,能不能给我再讲一讲啊
错误的地方:是说指定的参数太多
 
不可能!
1、按照上面的SQL Script生成存储过程
2、New a Application
3、设置TADOConnection
4、设置TADOStoreProc的ProcedureName
5、现在你看看TADOStoreProc.Parameters列表!!应该有两个!

//在D6 + SQL Server 2000 + ADO下编译通过!
 
我是按这个操作的,但是没有返回任何数据的,是不要在存储过程中加入几个参数啊
 
不过能的!
我发个程序给你把~~

//Unit1.pas文件
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Buttons, DB, ADODB;

type
TForm1 = class(TForm)
ADOConnection1: TADOConnection;
ADOStoredProc1: TADOStoredProc;
BitBtn1: TBitBtn;
Edit1: TEdit;
Edit2: TEdit;
procedure BitBtn1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.BitBtn1Click(Sender: TObject);
begin
ADOStoredProc1.Parameters.ParamByName('@flag').Value := Edit1.Text;
ADOStoredProc1.ExecProc;
Edit2.Text := VarToStr(ADOStoredProc1.Parameters.ParamByName('@RETURN_VALUE').Value);
end;

end.

//Unit1.dfm文件
object Form1: TForm1
Left = 255
Top = 112
Width = 696
Height = 480
Caption = 'Form1'
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'MS Sans Serif'
Font.Style = []
OldCreateOrder = False
PixelsPerInch = 96
TextHeight = 13
object BitBtn1: TBitBtn
Left = 192
Top = 168
Width = 75
Height = 25
Caption = 'BitBtn1'
TabOrder = 0
OnClick = BitBtn1Click
end
object Edit1: TEdit
Left = 192
Top = 72
Width = 121
Height = 21
TabOrder = 1
Text = 'Edit1'
end
object Edit2: TEdit
Left = 200
Top = 120
Width = 121
Height = 21
TabOrder = 2
Text = 'Edit2'
end
object ADOConnection1: TADOConnection
Connected = True
ConnectionString =
'Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security In' +
'fo=False;Initial Catalog=pubs;Data Source=COOLSLOB'
LoginPrompt = False
Provider = 'SQLOLEDB.1'
Left = 64
Top = 64
end
object ADOStoredProc1: TADOStoredProc
Connection = ADOConnection1
ProcedureName = 'authors_test'
Parameters = <
item
Name = '@RETURN_VALUE'
DataType = ftInteger
Direction = pdReturnValue
Precision = 10
Value = 1
end
item
Name = '@flag'
Attributes = [paNullable]
DataType = ftString
Size = 3
Value = '1'
end>
Left = 96
Top = 64
end
end

至于.dpr文件自己生成把!
还有,自己改改TADOConnection的字串!!
 
谢谢你了,我现在没有时间看这个了,
 
接受答案了.
 
后退
顶部