gpt4 book ai didi

c# - Dapper 在尝试使用 "Invalid attempt to call FieldCount when reader is closed."时给出 "QueryMultiple"

转载 作者:太空狗 更新时间:2023-10-30 01:02:15 28 4
gpt4 key购买 nike

我有一个 Dapper.NET 的 QueryMultiple 方法的包装器方法。它成功地从一个存储过程中获取数据,该存储过程有 3 个查询,它们都是 SELECT 查询。但是在获取数据后,我无法使用 ReadReadAsync 将数据分配给类变量。我在下面附上我的代码。

public Tuple<IEnumerable<T1>, IEnumerable<T2>, IEnumerable<T3>> 
QueryMultiple<T1, T2, T3>()
{
try
{
var data = MultiQuery("[App].[USP_GetAllCategories]");
var category = data.Read<T1>();
var subcategory = data.Read<T2>();
var subSubcategory = data.Read<T3>();
return new Tuple<IEnumerable<T1>, IEnumerable<T2>, IEnumerable<T3>>(
category, subcategory, subSubcategory);
}
catch (Exception)
{
return null;
}
}

public SqlMapper.GridReader MultiQuery(string storedProcedureName)
{
using (var connection = LocalConnection())
{
try
{
return connection.QueryMultiple(
sql: storedProcedureName,
commandType: CommandType.StoredProcedure);
}
catch (Exception)
{
return null;
}
finally
{
CloseConnection(connection);
}
}
}

最佳答案

查看您的MultiQuery 方法。尤其要注意 finally block 。现在考虑:在数据被消费之前调用了该 block 。基本上,不要那样做。

如果是我:

using (var connection = LocalConnection())
uaing (var data = conn.QueryMultiple("[App].[USP_GetAllCategories]",
command type: CommandType.StoredProcedure))
{
//... Consume
}

如果编写一个添加命令类型的 QueryMultipleSP 扩展方法有帮助,那么可以这样做,但是......

关于c# - Dapper 在尝试使用 "Invalid attempt to call FieldCount when reader is closed."时给出 "QueryMultiple",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34584955/

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