如何获取刚刚插入数据库的记录的ID?

iflyer 2006-08-16 10:36:47
C#+Sql Server开发,ID是表table1中的唯一自增标识字段,主键;表table2的mainID字段与表table1的ID字段建立外键。程序中的意图是往table1中插入一条纪录,再往table2插入一条纪录,并且table2的mainID = table1的ID。

查询了一下以往的贴子,说要用@@IDENTITY和事务,是否这样?我大体写了一下,大家看是否正确?

//准备工作,启动事务
......
try
{
myCommand.CommandText = "Insert Into table1 ...";
myCommand.ExecuteNonQuery();
myCommand.CommandText = "Select @@IDENTITY As GuideID";
int a = (int)myCommand.ExecuteScalar();
myCommand.CommandText = "Insert Into table2...";
myTrans.Commit();
}
Catch
{
......
}
...全文
349 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
ncjmc 2006-08-16
  • 打赏
  • 举报
回复
在典型的级联应用中,不能用@@IDENTITY,有可能会并发冲突
SCOPE_IDENTITY()是绝对可靠的,可以用在存储过程中,连触发器也不用建,没并发冲突
三省Ta叔 2006-08-16
  • 打赏
  • 举报
回复

比如:

strSQL = "insert into OA_CarUsing (CarNum,RegisterName)"
+ "values (@CarNum,@RegisterName) select @@identity";
cansum396 2006-08-16
  • 打赏
  • 举报
回复
return @@identity
ncjmc 2006-08-16
  • 打赏
  • 举报
回复
以前项目做过, 将 @@IDENTITY 换成 SCOPE_IDENTITY() 应该要好些:
try
{
myCommand.CommandText = "Insert Into table1 ...;SELECT SCOPE_IDENTITY() AS addid";
int a = (int)myCommand.ExecuteScalar();
myCommand.CommandText = "Insert Into table2...";
myTrans.Commit();
}
Catch
{
......
}

resen_tu 2006-08-16
  • 打赏
  • 举报
回复
将insert 的写成过程,通过过程返回
select @@identity
Samen168 2006-08-16
  • 打赏
  • 举报
回复
insert into ... select @@IDEntity as ID

id = (GUID)cmd.ExecuteCaler(cmd)

大概述样了
QuinsonYue 2006-08-16
  • 打赏
  • 举报
回复
就在table1写一个for insert触发器

begin
insert int table2 select mainID from inserted
end
iflyer 2006-08-16
  • 打赏
  • 举报
回复
需要用事务吗?

110,536

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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