gpt4 book ai didi

c# - Dapper 存储过程在向其传递 IEnumerable 时指定了太多参数

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

我通过这种方法调用我的程序:

public async Task<IEnumerable<Algorithm>> GetAlgorithmsByNameAsync(IEnumerable<string> names)
{
var parameters = new DynamicParameters();
parameters.Add("@names", names);

var connection = _connection.GetOpenConnection();
return await connection.QueryAsync<Algorithm>("GetAlgorithmsByName", parameters, commandType: CommandType.StoredProcedure);
}

我的程序如下所示:

CREATE TYPE [dbo].[StringList] AS TABLE(
[Item] [NVARCHAR](MAX) NULL
);

--PROCEDURE HERE--

CREATE PROCEDURE GetAlgorithmsByName

@names StringList READONLY -- my own type

AS
BEGIN
SELECT ALgorithmId, Name From Algorithms WHERE Name IN (SELECT Item FROM @names)
END

从上面的代码中,我收到一个错误:

"Procedure or function GetAlgorithmsByName has too many arguments specified."

我做错了什么?怎么通过IEnumerable<string>使用 dapper 到存储过程?

最佳答案

表值参数的使用并不简单;一种方法是通过 Dapper 添加的扩展方法 DataTable (类似于 AsTableValuedParameter ),但是:它的工作原理不像 IEnumerable<T> 那样简单- 至少,不是今天。您可能也不需要 DynamicParameters在这里。

如果您想要的只是一组字符串,那么一个非常实用的选择是查看内置的 string_split SQL Server 中的 API,如果您可以定义一个从未在数据中使用的分隔符标记。然后您可以只传递一个分隔字符串。

关于c# - Dapper 存储过程在向其传递 IEnumerable 时指定了太多参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59702663/

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