代码之家  ›  专栏  ›  技术社区  ›  blue piranha

获取存储过程返回的值而不是受影响的行

  •  2
  • blue piranha  · 技术社区  · 6 年前

    我有一个存储过程,它执行插入并返回(例如StudentID)插入的最后一行。

     create procedure insertStudent
     @...
     insert into ... values...
     set @StudentId = scope_identity();
     select StudentId from ... where StudentId = @StudentId
    

    在代码中,我有

    var sql = ...;
    using(var connection = new SqlConnection(connectionString)
    {
      var parameters = new DynamicParameters();
      parameters.Add ...;
      ...
      int studentId = connection.Execute(sql, parameters, commandType : CommandType.StoredProcedure);
      ...
    }
    

    联系Execute返回受影响的行数。

    1 回复  |  直到 6 年前
        1
  •  2
  •   Panagiotis Kanavos    6 年前

    使用 Query Execute . Execute用于不返回值的查询。

    Dapper存储库中的文档展示了如何调用返回结果的存储过程:

    var user = cnn.Query<User>("spGetUser", new {Id = 1}, 
        commandType: CommandType.StoredProcedure).SingleOrDefault();
    

    您也可以简化存储过程。插入、删除和更新具有 OUTPUT clause inserted deleted 虚拟表:

     insert into ... 
     OUTPUT inserted.StudentID
     values...
    

    您的代码可以简化为:

      int studentId = connection.Query<int>("insertStudent", parameters, commandType : CommandType.StoredProcedure)
                                .SingleOrDefault();