使用SqlDataAdapter获取新插入记录的ID

时间:2009-12-04 21:43:11

标签: c# sql-server-2005 sqldataadapter

BGREX.BGREXDataTable _bRexDataTable = new BGREX.BGREXDataTable();
BGREX.BGREXRow bgRexRow = _bRexDataTable.NewBGREXRow();

bgRexRow.BGRes_TITLE = "abc";
bgRexRow.BGRes_VERSION = 123;

_bRexDataTable.AddBGREXRow(bgRexRow);
int rewEffected = Adapter.Update(_bRexDataTable);

使用上面的数据库插入记录,工作完善。现在我需要自动生成的新插入记录的id(主键),而不是从

返回受影响的行
Adapter.Update(_bRexDataTable);

看起来我需要SCOPE_IDENTITY()函数,但我不确定在设计器中包含它的位置,因为设计人员对添加到实际插入查询的后续语法不满意。 尽管

,它在sqlserver管理控制台中运行良好
DECLARE @ROWI_D int

INSERT INTO TABLE
.....
.....
.....         
VALUES
("val1","val2",.......................)

SET ROW_ID = SCOPE_IDENTITY()

2 个答案:

答案 0 :(得分:2)

我不确定如何使用带有命令的sql语句来执行此操作。我不是说它无法完成,我只是从不使用语句,总是通过sprocs。

通过使用存储过程,您可以定义一个输出参数,您可以在sproc中将其设置为SCOPE_IDENTITY(),然后确保将该参数传递给命令,同时将其设置为输出方向。

抱歉,我没有直接sql调用的解决方案,但也许其他有这种方式工作经验的人会参与其中。

这是一个link到一个讨论同一主题和可能答案的线程。但是没有验证建议的解决方案是否有效。

答案 1 :(得分:1)

执行此操作的最佳方法是更改​​为在参数中返回所需值的存储过程。发布您现在进行更新的代码,我(或其他人)将向您展示如何重构它以使用存储过程。这并不难。