C# 获得自增ID

问题生 2008-07-14 12:41:38
BEGIN TRAN --开始事务
INSERT INTO A () VALUES (); --插入A表记录
INSERT INTO B (AID) VALUES ( ??? ); --插入B表记录
END TRAN --结束事务

想做的是给A插入一条记录后马上再给B插入一条记录

A表结构 AID, ... 关键键AID
B表结构 BID, AID, ... 关键键BID

AID、BID是自增型的,这个地方我该如何获得自增ID呢?
这里我用的SCOPE_IDENTITY()这个函数。

INSERT INTO B (AID) VALUES ( SCOPE_IDENTITY() );

可他老说无效的。
...全文
629 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
问题生 2008-07-17
  • 打赏
  • 举报
回复
谢谢各位的解答。我用了最原始的方法写了个存储过程来往里传了20多个参数。把问题解决了。哎~一直没找到更好的方法。
律己修心 2008-07-14
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 roy_88 的回复:]
SQL code或
--@@identity
BEGIN TRAN --开始事务
declare @iden int
INSERT INTO A () VALUES (); --插入A表记录
set @iden=@@identity
INSERT INTO B (AID) VALUES ( @iden ); --插入B表记录
END TRAN --结束事务
[/Quote]
中国风 2008-07-14
  • 打赏
  • 举报
回复

--@@identity
BEGIN TRAN --开始事务
declare @iden int
INSERT INTO A () VALUES (); --插入A表记录
set @iden=@@identity
INSERT INTO B (AID) VALUES ( @iden ); --插入B表记录
END TRAN --结束事务


昵称被占用了 2008-07-14
  • 打赏
  • 举报
回复
BEGIN TRAN --开始事务 
INSERT INTO A () VALUES (); --插入A表记录
INSERT INTO B (AID) VALUES ( SCOPE_IDENTITY() );
END TRAN --结束事务


应该没问题,除非1、B表有其他非空没有磨人的字段
2、B表的关键BID 不是自增长的
3、B表有唯一索引
ojuju10 2008-07-14
  • 打赏
  • 举报
回复


BEGIN TRAN --开始事务

INSERT INTO A () VALUES (); --插入A表记录

INSERT INTO B (AID) VALUES ( @@identity ); --插入B表记录
END TRAN --结束事务

问题生 2008-07-14
  • 打赏
  • 举报
回复
对不起,刚查出来,问题不存在在数据库中,是我C#代码的问题。
更改一下问题

string sqlInsertA = "INSERT INTO A (index1, index2) VALUES ( @index1, @index2 );";

SqlParameter[] AParams = { new SqlParameter("@index1", SqlDbType.Int),
new SqlParameter("@index2", SqlDbType.Int)};

string sqlInsertB = "INSERT INTO B (AID, bindex) VALUES ( SCOPE_IDENTITY(), @bindex );";

SqlParameter BParams = new SqlParameter("@bindex", SqlDbType.Int);

SqlConnection conn = new SqlConnection( SQLHelper.ConnectionStringUserTrans );
conn.Open();
SqlTransaction trans = conn.BeginTransaction( IsolationLevel.ReadCommitted );
try
{
//插入A
SQLHelper.ExecuteNonQuery( trans, CommandType.Text, sqlInsertA, AParams );
//插入B
SQLHelper.ExecuteNonQuery( trans, CommandType.Text, sqlInsertB, BParams );

trans.Commit();
}
catch ( Exception e )
{
trans.Rollback();
}
finally
{
conn.Close();
}


在插入B记录时得不到AID。在程序里我该如何能得到刚插入的自增ID呢?

34,593

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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