gpt4 book ai didi

c# - 异步填充数据表?

转载 作者:太空狗 更新时间:2023-10-30 00:17:57 26 4
gpt4 key购买 nike

我在 .NET Core 2.0 应用程序中有以下功能。

public DataTable CallDb(string connStr, string sql)
{
var dt = new DataTable();
var da = new SqlDataAdapter(sql, connStr);
da.Fill(dt);
return dt;
}

如何将其转换为异步函数?

public async Task<DataTable> CallDb(string connStr, string sql)
{
var dt = new DataTable();
var da = new SqlDataAdapter(sql, connStr);
da.Fill(dt); // No FillAsync to await?
return dt;
}

我需要使用 DataTable 因为 sql 可能会返回具有不同架构的数据。有更好的方法来处理动态模式吗?

最佳答案

SqlDataAdapter 从未更新为包含方法的 TPL 版本。你可以这样做:

await Task.Run(() => da.Fill(dt));

但这会创建一个无用的线程。

一个好的方法是使用这样的东西:

public async Task<DataTable> CallDb(string connStr, string sql)
{
var dt = new DataTable();
var connection = new SqlConnection(connStr);
var reader = await connection.CreateCommand().ExecuteReaderAsync();
dt.Load(reader);

return dt;
}

当然,应该进行一些更改,例如using 语句。但是,这里您使用的是正确的异步调用方式。

关于c# - 异步填充数据表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49078458/

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