代码之家  ›  专栏  ›  技术社区  ›  Asad

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

  •  1
  • Asad  · 技术社区  · 15 年前
    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 回复  |  直到 13 年前
        1
  •  2
  •   user10635    15 年前

    我不确定如何使用SQL语句和命令来实现这一点。我并不是说这不可能完成,我只是从不使用语句,总是通过存储过程。

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

    很抱歉,我没有直接SQL调用的解决方案,但可能会有其他具有这种工作经验的人加入。

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

        2
  •  1
  •   Hogan    15 年前

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