DATASNAP中间件调用带OUTPUT参数的存储过程

服务端:

function TServerMethods1.spExecOut(funcId, sqlId,

inParams: OleVariant): OleVariant;
var
d: TfrmDB;
procName: string;
params: TFDParams;
i, h: Integer;
begin
Result := null;
d := DBPool.Lock;
if not Assigned(d) then
Exit;
try
try
procName := frmBuffer.GetSqlSelect(funcId, sqlId);
if procName = ‘‘ then
Exit;
d.proc.Close;
d.proc.StoredProcName := procName;
d.proc.Prepare;
params := TFDParams.Create;
try
UnpackFDParams(inParams, params);
for i:=0 to params.Count -1 do
for h:=0 to d.proc.ParamCount-1 do
if d.proc.Params[h].Name = params[i].Name then
begin
if d.proc.Params[h].ParamType=ptInput then
begin
d.proc.Params[h].Value := params[i].Value;
Break;
end;
end;
finally
params.Free;
end;
d.proc.ExecProc;
Result := PackageFDParams(d.proc.Params);
except
on e: Exception do
begin
Result := null;
Log.WriteLog(‘TServerMethods1.spExecOut ‘ + e.Message);
Exit;
end;
end;
finally
DBPool.Unlock(d);
end;
end;

客户端调用:

procedure TfrmMain.Button2Click(Sender: TObject);
var
r:OleVariant;
p:TParams;
begin
p:=TParams.Create(nil);
p.Clear;
p.CreateParam(ftInteger,‘@a‘,ptInput).Value :=1;
p.CreateParam(ftInteger,‘@b‘,ptInput).Value :=2;
p.CreateParam(ftInteger,‘@c‘,ptOutput);
r := spExecOut(‘9999‘,‘3‘,PackageParams(p));
UnpackParams(r,p);
p.ParamByName(‘@c‘).Value;
p.Free;
end;

end.

时间: 2024-08-14 21:30:44

DATASNAP中间件调用带OUTPUT参数的存储过程的相关文章

c#调用带输出参数的存储过程

sql server中编写一个存储过程: CREATE PROCEDURE ProGetPWD @username varchar(20), @password varchar(20) OUTPUT AS BEGIN SELECT @password = password FROM Users WHERE username = @username END -------------------------- 下面是.NET中调用存储过程的方法: string strConnection = "u

sybase带输出参数的存储过程实例

使用return返回 --create pro USE yfb go create proc cwqi_test_pro(  @newName varchar(20) out,  @oldName varchar(20) in  ) as begin   set @[email protected]   return 1 end --run pro DECLARE @newName varchar(20) DECLARE @oldName varchar(20) DECLARE @result 

【Mybatis】MyBatis调用带有返回结果、output参数的存储过程上与ibatis的区别

用过mybatis的应该都知道它是ibatis被Google收购后重新命名的一个工程,因此也做了大量升级.本文就来介绍下两者在调用存储过程上的一点区别,ibatis有一个专门的标签<procedure>,在mybatis里面已经没有这标签了,而是通过一个参数statementType="CALLABLE"来区分. 存储过程: ALTER PROCEDURE [dbo].[Pro_Create_Number] @ChannelNo VARCHAR(10) ,--渠道号 @Nu

C#调用SQL中的存储过程中有output参数,存储过程执行过程中返回信息

C#调用SQL中的存储过程中有output参数,类型是字符型的时候一定要指定参数的长度.不然获取到的结果总是只有第一字符.本人就是由于这个原因,折腾了很久.在此记录一下,供大家以后参考! 例如: CREATE PROCEDURE sp_AccountRole_Create @CategoryID int, @RoleName nvarchar(10), @Description nvarchar(50), @RoleID int output AS DECLARE @Count int -- 查

带OUTPUT参数的CLR存储过程

前面写了一篇<带参数的CLR存储过程>http://www.cnblogs.com/insus/p/4373605.html ,如果我们需要创建一个带OUTPUT返回值. 实现它,可以先了解一下C#的OUT关键词 out (C# Reference) 打开刚才前面我们写好的SQL DataBase project,添加一个方法: 可复制代码: public static void GetFruitName(out SqlString fruitName, SqlByte fruit_nbr )

创建带输出参数的存储过程

语法: create proc 存储过程名 @参数1 数据类型=默认值 output, @参数2 数据类型=默认值 output as sql语句 go 例子: 1 --创建带输入输出参数的存储过程 2 /* 3 题目要求 4 向母婴用品这个类添加一种商品,要求成功后把商品的编号输出 5 */ 6 7 use E_Market 8 go 9 10 if exists(select * from sysobjects where name='usp_InsertCommodity') 11 dro

带输出参数的存储过程的定义,以及在aso.net中调用

ALTER proc [dbo].[mp_w_RechargePortalPayPal_All] ( @PayPalOrderNo nvarchar(50), --订单号 @nAccountIDFrom int, --充值帐号 @nAccountIDTo int, --充入帐号 @cTotalMoney numeric(18,2), --总价        用户所在货币总价 @nMoneyType int, --货币类型    用户所在货币类型    -- 非system货币 @nToGameI

ORACLE—010:调用有游标参数的存储过程

游标一般可作为存储过程的返回参数,如下 PROCEDURE PRO_MY_TEST(var1 VARCHAR2, var2 OUT CURSOR) 那么如何调用这个存储过程呢, 如下 declare var1 varchar2(40); var2 SYS_REFCURSOR; begin PROCEDURE PRO_MY_TEST(var1,var2); end;

执行带返回参数的存储过程

public string usp_getpasswd (string passstr, ref string retpswd) { string retpswdNew = ""; SqlParameter[] Parms = { new SqlParameter("@passstr", SqlDbType.VarChar, 100), new SqlParameter("@retpswd", SqlDbType.VarChar, 100) };