存储过程中得到新增数据的ID
数据库中有自增字段UID
存储过程如下:
CREATE PROCEDURE AddUser
(
@Username nvarchar(50),
@Email nvarchar(100),
@Password nvarchar(50),
@UserID int OUTPUT
)
AS
INSERT INTO Users
( Username, Email, Password )
VALUES
( @Username, @Email, @Password
)
SELECT
@UserID = @@Identity
GO
程序如下:
SqlCommand cmd=new SqlCommand("AddUser",conn);
cmd.CommandType=CommandType.StoredProcedure;
cmd.Parameters.Add(new SqlParameter("@Username",Username));
cmd.Parameters.Add(new SqlParameter("@Email",Email));
cmd.Parameters.Add(new SqlParameter("@Password",Password));
SqlParameter outPara = new SqlParameter("@UserID", SqlDbType.Int);
outPara.Direction = ParameterDirection.Output;
cmd.Parameters.Add(outPara);
if (cmd.ExecuteNonQuery() > -1)
{
if (outPara.Value is int)
{
int retValue = (int)outPara.Value;
}
}
CMD执行
int UID;
UID = cmd.Parameters["@userid"];
2、
SqlParameter.Direction 属性
获取或设置一个值,该值指示参数是只可输入、只可输出、双向还是存储过程返回值参数。
属性值
ParameterDirection 值之一。默认为 Input。
Input 参数是输入参数。
InputOutput 参数既能输入,也能输出。
Output 参数是输出参数。
ReturnValue 参数表示诸如存储过程、内置函数或用户定义函数之类的操作的返回值。
3、
CREATE PROCEDURE [dbo].[ProgrammeDetail Add]
@Beginning_Date DateTime ,
@Ending_Date DateTime,
@currentID varchar(10) out
AS
BEGIN
begin tran
insert into ProgrammeDetail(BeginTime,EndTime) values( @Beginning_Date,@Ending_Date)
select @currentID=max(ProgrammeID) from ProgrammeDetail
commit
return @currentID
END
GO
——————————————————————————
--------------------------------------------
假设有存储过程如下:
---------------------------------------------
CREATE proc sp_uptmp @tmpName varchar(50),@srcPos varchar(255)
as
Begin TRAN
insert into t_template values(@tmpName,@srcPos)
COMMIT
return isnull(@@identity,0)
GO
------------------------------------------------------------
在 ado.net 里面获取返回值的方法为(c#):
------------------------------------------------------------
SqlConnection dbconn = new SqlConnection(connStr);
SqlCommand cmd = new SqlCommand("sp_uptmp",dbconn);
cmd.CommandType = CommandType.StoredProcedure;
SqlParameter tmpName = cmd.Parameters.Add("@tmpName",SqlDbType.VarChar);
SqlParameter srcPos = _cmd.Parameters.Add("@srcPos",SqlDbType.VarChar);
SqlParameter rtnval = cmd.Parameters.Add("rval",SqlDbType.Int);
tmpName.Direction = ParameterDirection.Input;
srcPos.Direction = ParameterDirection.Input;
rtnval.Direction = ParameterDirection.ReturnValue;
tmpName.Value = "";
srcPos.Value = "";
dbconn.Open();
cmd.ExecuteNonQuery();
dbconn.Close();
tmpid = (int)rtnval.Value; //此处即为返回值
3、
存储过程:
create procedure AddRecord
(@field1 varchar(20),
@field2 varchar(30))
as
insert into mytable(field1,field2) values(@field1,@field2)
select @@identity
go
在asp.net程序中这样调用存储过程:
SqlConnection conn=....//连接字符串
SqlCommand cmd=new SqlCommand("AddRecord",conn);
cmd.CommandType=CommandType.StoredProcedure;
cmd.Parameters.Add("@field1","field1的值");
cmd.Parameters.Add("@field2","field2的值");
conn.Open();
int iKey=(int)cmd.ExecuteScalar();
conn.Close();
最后的iKey就是你要的刚插入的主键值。
存储过程中得到新增数据的ID的更多相关文章
- ssm mysql 新增数据返回id
描述: 在ssm项目中,新增一条数据,返回该数据的数据库id(主键) 实现方法: 1.xml 增加 useGeneratedKeys="true" keyProperty=&qu ...
- Thinkphp5.0 获取新增数据的ID
// 方法1 insertGetId方法新增数据并返回主键值使用getLastInsID方法: Db::name('user')->insert($data); $userId = Db::na ...
- Oracle 存储过程中的临时表数据自动清空
问题叙述: 用 EXECUTE IMMEDIATE 动态往临时表插入数据,跟踪发现插入临时表后数据会立马清空,按理说等存储过程执行完才会清空临时表才对,现在是执行插入语句后下一步验证就发现临时表就没有 ...
- 创建触发器在表中播入数据时ID自动增长
),age )) create or replace trigger gger_tt before insert on ttt for each row when (new.id is null) b ...
- sql server中新增一条数据后返回该数据的ID
开发中遇到的问题:在新增一条数据后往往不需要返回该数据的ID,但是有的时候可能需要返回该数据的ID以便后面的编程使用. 在这里介绍两种方法: 其一:使用存储过程: create procedure a ...
- 将list<对象>转换成DataTable,把DataTable转换成参数传入存储过程实现批量插入数据
领导让在存储过程中批量添加数据,找出效率最高的,我看到后台代码后,发现可以将list<对象>转换成DataTable,把DataTable转换成参数传入存储过程实现批量插入数据,知道还有其 ...
- 使用Hibernate框架,新增数据后如何返回新增数据的全部信息
一.需求描述:一个修改事物(TRANSACTION)先后包括子事物修改和子事物新增,修改事物完成后返回其子事物新增的全部数据 二.实现:若实现修改对象后还需要新增一个新对象,并返回新对象的需求,保存 ...
- [转]SQLSERVER存储过程调用不同数据库的数据_存储过程中通过链接服务器访问远程服务器
本文转自:http://blog.csdn.net/nnaabbcc/article/details/7967761 存储过程调用不同数据库的数据 在存储过程调用不同数据库的数据该如何做,比如在存储过 ...
- 代码中添加事务控制 VS(数据库存储过程+事务) 保证数据的完整性与一致性
做人事档案的系统考虑到数据的安全性与一致性,毕竟是要对外上线.真正投入使用的项目,数据库的可靠性与安全性上我们开发人员要考虑的就很多了,记得做机房收费系统时注册新卡是自己为了简单,写成了一个存储过程( ...
随机推荐
- 【mysql】mysql中单列索引、联合索引、Join联表查询建立索引 和 EXPLAIN的分析使用
2.创建联合索引,从坐到右分别为:userid.openId.name 2. #### -------------- 多表联合查询 update 2019/03/13 ------------ ...
- PHP-手册阅读笔记
1.第一次遇到$_ENV为空数组的情况, 原来是PHP.INI中variables_order为'GPCS'(表示系统在定义PHP预定义变量时的顺序是GET,POST,COOKIES,SERVER,只 ...
- JavaScript-实现滚动条
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- 【转载】加密Spring加载的Properties文件
目标:要加密spring的jdbc配置文件的密码口令. 实现思路:重写加载器的方法,做到偷梁换柱,在真正使用配置之前完成解密. 1.扩展 package com.rail.comm; import j ...
- ubuntu(14.04版本) 配置虚拟环境(一个ip对应多个域名)
以下操作是建立在apahce安装成功的情况下 1.配置本地的host. 假设虚拟主机上的ip是:192.168.1.51,那么客户端本地的host可以配置成:
- 深入浅出Android开发之Surface介绍
一 目的 本节的目的就是为了讲清楚Android中的Surface系统,大家耳熟能详的SurfaceFlinger到底是个什么东西,它的工作流程又是怎样的.当然,鉴于SurfaceFlinger的复杂 ...
- RHCE7 -- systemctl命令
查询所有单元的状态: [root@rhce7 ~]# systemctl UNIT LOAD ACTIVE SUB DESCRIPTION proc-sys-fs-binfmt_misc.automo ...
- Chrome英文版离线安装包下载
在原来在线安装地址后面加上 ?standalone=1 即可 https://www.google.com/intl/en/chrome/browser/desktop/index.html?st ...
- nginx实战三
nginx正向代理 https://coding.net/u/aminglinux/p/nginx/git/blob/master/proxy/z_proxy.md Nginx正向代理使用场景并不多见 ...
- 怎么从docker中copy文件到 本机
怎么从docker中copy文件到 本机 docker cp <containerId>:/file/path/within/container /host/path/target