gpt4 book ai didi

c# - Dapper - 将 int 列表传递给存储过程

转载 作者:行者123 更新时间:2023-12-02 19:55:04 25 4
gpt4 key购买 nike

我的存储过程SQL语句非常简单。

Delete From TableName where ID IN (@id)

我想从 C# 代码传递列表或数组,并希望返回已删除的行数。

下面是我的代码,不知怎的,我不相信并认为这不是正确的方法。执行此操作的有效方法是什么?

using (SqlConnection connection = new SqlConnection(_connectionString))
{
await connection.OpenAsync();

DynamicParameters parameters = new DynamicParameters();

foreach (var id in ids)
{
parameters.Add("@Id", id, DbType.Int32, ParameterDirection.Input);

await connection.ExecuteAsync(
ProcedureNames.DeleteRules,
parameters,
commandType: CommandType.StoredProcedure);
}
}

最佳答案

创建一个模型以将 id 存储在参数中。要获取受影响的行,请获取执行调用的结果。

using (SqlConnection connection = new SqlConnection(_connectionString)) {
await connection.OpenAsync();

var affectedRows = await connection.ExecuteAsync(
ProcedureNames.DeleteRules,
new { id = ids.ToArray() }, //<-- Passing collection
commandType: CommandType.StoredProcedure);
}

另一种方法

using (SqlConnection connection = new SqlConnection(_connectionString)) {
await connection.OpenAsync();

var affectedRows = await connection.ExecuteAsync(
ProcedureNames.DeleteRules,
ids.Select(id => new { id = id }).ToArray(), //<-- Passing collection
commandType: CommandType.StoredProcedure);
}

将多次执行该语句。对于数组列表中的每个对象一次。它仍然会为您提供执行所有语句的受影响的总行数。

关于c# - Dapper - 将 int 列表传递给存储过程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57242615/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com