通过存储过程插入记录之后如何获得新纪录的id(自动增长)

coverallwangp 2010-05-03 05:10:17
比如,记录中有四个字段,其中gi_id是自动增长的

CREATE PROCEDURE pro_addgoods
@u_name nvarchar(50),
@gi_click int,
@gi_title nvarchar(50)
As
insert into t_goods_info(u_name,gi_click,gi_title) values(@u_name,@gi_click,@gi_title)

我想获得添加成功后的gi_id,是否可以在上述存储过程中加一个输出参数,输出gi_id?
该如何添加这个输出参数?同时添加后如何赋值,如何在后台代码中执行存储过程的时候获得该参数?

下面是执行存储过程的代码:

SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["ershouConnectionString"].ToString());
//声明执行存储过程的SqlCommand
SqlCommand scd_sel = new SqlCommand("pro_addgoods", conn);
scd_sel.CommandType = CommandType.StoredProcedure;
//给存储过程的参数赋值
SqlParameter spa;
spa = scd_sel.Parameters.Add("@u_name", SqlDbType.NVarChar, 50);
spa.Direction = ParameterDirection.Input;
spa.Value = Session["account"].ToString();
spa = scd_sel.Parameters.Add("@gi_click", SqlDbType.Int, 4);
spa.Direction = ParameterDirection.Input;
spa.Value = 0;
spa = scd_sel.Parameters.Add("@gi_title", SqlDbType.NVarChar, 50);
spa.Direction = ParameterDirection.Input;
spa.Value = txttitle.Text;
//执行存储过程
if (conn.State == ConnectionState.Closed)
conn.Open();
try
{
scd_sel.ExecuteNonQuery();
scd_sel.Dispose(); //释放资源
}
catch (SqlException ae)
{
throw (ae);
}
conn.Dispose();
...全文
409 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
coverallwangp 2010-05-03
  • 打赏
  • 举报
回复
已成功解决,谢谢各位,对我帮助太大了
whb147 2010-05-03
  • 打赏
  • 举报
回复
return @@IDENTITY 也可以获取
huangwenquan123 2010-05-03
  • 打赏
  • 举报
回复
@@IDENTITY
返回最后插入的标识值。
vip__888 2010-05-03
  • 打赏
  • 举报
回复
select @@IDENTITY
moonwrite 2010-05-03
  • 打赏
  • 举报
回复
补充@@identity @@开头的叫系统级的变量
zhuxiaojun2002 2010-05-03
  • 打赏
  • 举报
回复
错了,是这样的
set @gi_id = @@IDENTITY
zhuxiaojun2002 2010-05-03
  • 打赏
  • 举报
回复
CREATE PROCEDURE pro_addgoods
@u_name nvarchar(50),
@gi_click int,
@gi_id int output,
@gi_title nvarchar(50)
As
insert into t_goods_info(u_name,gi_click,gi_title) values(@u_name,@gi_click,@gi_title)
SET @gi_click = @@IDENTITY
wuyq11 2010-05-03
  • 打赏
  • 举报
回复
insert into t_goods_info(u_name,gi_click,gi_title) values(@u_name,@gi_click,@gi_title)
select @@identity
通过存储过程参数获取output 值
using(SqlConnection connection = new SqlConnection(""))
{
using (SqlCommand insertCommand = connection.CreateCommand())
{
insertCommand.CommandText = "INSERT INTO Tb(u_name) VALUES (@u_name) SET @ID = SCOPE_IDENTITY()";

SqlParameter NumberParameter = new SqlParameter("@u_name", SqlDbType.Int);
NumberParameter.Value = MyNumber;
insertCommand.Parameters.Add(NumberParameter);
insertCommand.ExecuteNonQuery();

SqlParameter b= new SqlParameter("@ID", SqlDbType.Int);
b.Direction = ParameterDirection.Output;
insertCommand.Parameters.Add(b);

id = (int)b.Value;
}
}
coverallwangp 2010-05-03
  • 打赏
  • 举报
回复
无人回答吗??
我要哭了 百度之后都是一个版本的解答,不知所云,哎,中国人的悲哀

62,025

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧