C#中怎么获取批量插入数据后的自增主键ID
时间: 2024-09-15 21:08:05 浏览: 48
c#连接sqlserver数据库、插入数据、从数据库获取时间示例
在C#中,当你使用ADO.NET操作数据库并执行批量插入数据后,通常涉及到的是存储过程或者是直接的SQL命令。如果你使用Entity Framework、Dapper或者其他ORM框架,它们通常会提供一些便捷的方式来处理这种情况。
1. **Entity Framework**:EF Core 提供了DbContext上下文,你可以通过`SaveChangesAsync()`方法执行批量插入,并自动获取每个插入操作生成的新ID。例如:
```csharp
using (var context = new YourDbContext())
{
var entities = new List<YourEntity>();
// 添加实体到列表
int[] ids = await context.SaveChangesAsync();
}
```
`SaveChangesAsync()`会返回一个包含每个插入操作影响行数的数组,对应位置就是新生成的主键值。
2. **Dapper**:对于纯SQL操作,Dapper允许你使用参数化查询,并通过`.LastInsertId()`方法获取最后一个插入操作的自增ID。示例:
```csharp
string sql = "INSERT INTO YourTable (...) VALUES (...)";
using (IDbConnection conn = OpenConnection())
{
var rowsAffected = conn.Execute(sql, parameters);
int lastId = conn.LastInsertedId(); // 获取自增ID
}
```
3. **存储过程**:如果使用存储过程完成批量插入,可以在存储过程中直接设置返回参数为自增ID,然后在C#中调用存储过程获取结果。
记住,在使用上述方法前,确保你的表配置了适当的标识符策略(Identity或Sequential),并且连接对象支持获取最近的插入ID。
阅读全文