在Delphi中如何获得SQL中存储过程的返回值?
示例存储过程:
create procedure proc_login
username varchar(20),
password varchar(20)
as
declare @result int
select @result=count(*) from loginuser where user=@username and pass=@password
if @result=0
return 0
return 1
go
Delphi代码:
var ret:integer;
......
with ADOStoredProc1 do
begin
Close;
ProcedureName:='proc_login';
Parameters.Clear;
Parameters.Refresh;
Parameters.ParamByName('@username').Value:= Edit1.text;
Parameters.ParamByName('@password').Value:= Edit2.text;
ExecProc;
ret:= Parameters.ParamByName('@return_value').Value;
end;
if ret=1 //用户名密码匹配
begin
//你想要的操作
end
示例二
在delphi中取存储过程的返回值
Close;
SQL.Clear;
SQL.Text:='declare @ReturnCount int exec Pr_SelStockHead '''+StockNo+''',@ReturnCount output select @ReturnCount';
open;
CountNO:=fields[0].value;
cxtxtdtNameCSHYH.Text:=IntToStr(CountNO);
在sql语句里面 如果有返回值的话,可以是用return 返回,,其他的都是参数返回,如果取参数的话 从 Parameters[1].Value 开始,如果取return 的返回值 要用Parameters[0].Value
调用存储过程的方法,用adodataset控件
function TfrmPower_Cut.HasNewPowerCutInfo: Boolean;
begin
Result := False;
with spPower_Cut do //spPower_Cut为Tadostoredproc控件
begin
Close;
ProcedureName := 'p_Has_PowerCut_Info';
with Parameters do
begin
Clear;
Refresh;
ParamByName('@BiggestID').Direction := pdInputOutput;
ParamByName('@BiggestID').Value := FPower_Cut_ID_Refresh;
ParamByName('@NoProcess').Direction := pdInputOutput;
ParamByName('@NoProcess').Value := FNoProcess;
ParamByName('@IsPassTimeAndNoProc').Direction := pdInputOutput;
ParamByName('@IsPassTimeAndNoProc').Value := FIsPassTimeAndNoProc;
ParamByName('@IsNearestTime').Direction := pdInputOutput;
ParamByName('@IsNearestTime').Value := FIsNearestTime;
ParamByName('@IsDelete').Direction := pdInputOutput;
ParamByName('@IsDelete').Value := FIsNearestTime;
ParamByName('@Hour').Value := 3;
end;
Prepared;
try
ExecProc;
if Parameters[0].Value <> FPower_Cut_ID_Refresh then
begin
FPower_Cut_ID_Refresh := Parameters[1].Value;
Result := True;
end;
if Parameters[2].Value <> FNoProcess then
begin
FNoProcess := Parameters[2].Value;
Result := True;
end;
if Parameters[3].Value <> FIsPassTimeAndNoProc then
begin
FIsPassTimeAndNoProc := Parameters[3].Value;
Result := True;
end;
if Parameters[4].Value <> FIsNearestTime then
begin
FIsNearestTime := Parameters[4].Value;
Result := True;
end;
if Parameters[5].Value <> FIsDelete then
begin
FIsDelete := Parameters[5].Value;
Result := True;
end;
except
on e: Exception do
ShowMessage(e.Message);
end;
end;
end;
存储过程
/*
功能: 判断数据库内是否有新的呼叫中心停电信息
参数: @BiggestID 客户端最大的记录ID,如果小于当前表中的ID,则返回最大的ID,客户端据此判断是否刷新
返回值: 无
*/
ALTER procedure p_Has_PowerCut_Info @BiggestID bigint=0 output, @NoProcess int=0 output,
@IsPassTimeAndNoProc int=0 output, @IsNearestTime int=0 output, @IsDelete int=0 output, @Hour int=3 as
begin
declare @tmp_ID bigint,@tmp_NoProcess int
select @tmp_ID=Power_Cut_ID from Power_Cut
if (@@error=0) and (@@rowcount>0)
if @tmp_id>@BiggestID
set @BiggestID=@tmp_ID
select @tmp_NoProcess=count(*) from Power_Cut where PC_ProcType=0
if (@@error=0) and (@@rowcount>0)
set @NoProcess=@tmp_NoProcess
--超过发送时间未处理
select @IsPassTimeAndNoProc=count(case when (getdate()>PC_StartTime and PC_ProcType=0) then 1 end) from Power_Cut
--距离发送时间还有3小时未处理
select @IsNearestTime=count(case when (DATEDIFF(minute, getdate(), PC_StartTime)>=0 and DATEDIFF(minute, getdate(), PC_StartTime)<@Hour*60
and PC_ProcType=0) then 1 end) from Power_Cut
select @IsDelete=count(*) from Power_Cut where PC_State=2
return @BiggestID
end
return 返回的是正确或错误的标志,比如 100: 成功 0: 失败(未知原因) 1: 参数错误 2: .... 然后参数里面返回具体需要的数据
在Delphi中如何获得SQL中存储过程的返回值?的更多相关文章
- C#中的函数(二) 有参有返回值的函数
接上一篇 C#中的函数(-) 无参无返回值的函数 http://www.cnblogs.com/fzxiaoyi/p/8502613.html 这次研究下C#中的函数(二) 有参有返回值的函数 依然写 ...
- SqlServer如何获取存储过程的返回值
1.Output参数返回值 1 CREATE PROCEDURE [dbo].[upInformation]( 2 @age int , 3 @id bigint OUTPUT 4 ) 5 AS 6 ...
- 利用SQLServer查询分析器获取存储过程的返回值,检查测试存储过程
1.存储过程没有返回值的情况(即存储过程语句中没有return之类的语句)用方法 int count = ExecuteNonQuery(..)执行存储过程其返回值只有两种情况(1)如果通过查询分析器 ...
- .net 接收存储过程的返回值 。。。。
.net 接收存储过程的返回值 .... Posted on 2009-06-10 20:26 且行且思 阅读(...) 评论(...) 编辑 收藏 例如在向数据库添加新数据时,需要检测是否有重复 本 ...
- 关于ExecuteNonQuery执行存储过程的返回值 、、实例讲解存储过程的返回值与传出参数、、、C#获取存储过程的 Return返回值和Output输出参数值
关于ExecuteNonQuery执行存储过程的返回值 用到过ExecuteNonQuery()函数的朋友们在开发的时候肯定这么用过. if(cmd.ExecuteNonQuery("xxx ...
- C#获取执行存储过程的" 返回值"代码
以下是C#代码: /// <summary> /// 执行存储过程,返回" 返回值" /// </summary> /// <param name=& ...
- 用sp_executesql执行动态SQL语句及获得返回值
过去我执行拼凑出来的动态SQL语句,都直接使用EXEC @sql 的方式.有好几次,都看到有资料说,应该尽量使用 sp_executesql. 究其原因,是因为仅仅参数不同的情况下,sp_execut ...
- Entity Framework中对存储过程的返回值的处理
很早就开始注意到EF了,但一直没有机会用,换了工作后,第一个项目就使用EF6进行开发. 项目不是很大,EF完全可以胜任. 但是开发过程中,难免还是会遇到一些复杂的运算,需要频繁访问数据库. 此时,想到 ...
- C#EF中,使用类似于SQL中的% 模糊查询
最近在做项目的时候需要使用到模糊查询,但是后台使用EF写的 而不是ADO或者是Dapper,如果是这样的话,我们就可以使用Sql语句直接进行模糊查询 现在我们需要在LINQ中使用类似于模糊查询 在EF ...
随机推荐
- #include stdio.h(B)
#include <stdio.h> int main() { //***********一.循环语句*************** //什么叫做循环: //重复的做某件事情,重复的执行一 ...
- google friendly testing
https://www.google.com/webmasters/tools/mobile-friendly/?mc_cid=cc21b18877&mc_eid=cf2bbeb9b2 htt ...
- 20145209 2016-2017-2 《Java程序设计》第9周学习总结
20145209 2016-2017-2 <Java程序设计>第9周学习总结 教材学习内容总结 JDBC简介 撰写应用程序是利用通信协议对数据库进行指令交换,以进行数据的增删查找 JDBC ...
- 基于Kafka的服务端用户行为日志采集
本文来自网易云社区 作者:李勇 背景 随着互联网的不断发展,用户所产生的行为数据被越来越多的网站重视,那么什么是用户行为呢?所谓的用户行为主要由五种元素组成:时间.地点.人物.行为.行为对应的内容.为 ...
- C# 简单工厂
如下: public static IList<T> Create<T>(Type type) { if (type == typeof(List<T>)) { r ...
- OSG-基础知识-程序框架
本文转至http://www.cnblogs.com/shapherd/archive/2010/08/10/osg.html 作者写的比较好,再次收藏,希望更多的人可以看到这个文章 互联网是是一个相 ...
- php单例模式和工厂模式
单例模式:防止重复实例化,避免大量的new操作,减少消耗系统和内存的资源,使得有且仅有一个实例对象 header("Content-type: text/html; charset=utf- ...
- selenium,unittest——驾照科目一网上答题自动化
需求很简单,所有题目全选A,然后点提交出分,校验是否到达出分这步 遇到的坑有这几个,一个是assertIn哪个是校验哪个是文本要分清,还有code的编码统一到Unicode,最后就是xpath定位各个 ...
- 了解Python控制流语句——continue 语句
continue 语句用以告诉 Python 跳过当前循环块中的剩余语句,并继续该循环的下一次迭代. 案例(保存为 continue.py): while True: s = input('Enter ...
- Grid 网格布局
CSS 网格布局(Grid Layout) 是CSS中最强大的布局系统. 这是一个二维系统,这意味着它可以同时处理列和行,不像 flexbox 那样主要是一维系统. 你可以通过将CSS规则应用于父元素 ...