gpt4 book ai didi

c# - 了解与 odbc 相关的异步方法

转载 作者:太空宇宙 更新时间:2023-11-03 14:43:27 24 4
gpt4 key购买 nike

我有一个使用 ODBC 获取一些与数据库相关的数据的方法,但是我需要将我的方法更改为异步,这样它就不会卡住表单但仍会加载我看到的数据ODBC 读取器上的 ReadAsync 方法,但如何使用它。

public decimal GetFreeStockFromSage(string productCode)
{
string sageDsn = ConfigurationManager.AppSettings["SageDSN"];
string sageUsername = ConfigurationManager.AppSettings["SageUsername"];
string sagePassword = ConfigurationManager.AppSettings["SagePassword"];
decimal retDecimal =(decimal) 0.00;
//using (var connection = new OdbcConnection("DSN=SageLine50v24;Uid=Manager;Pwd=;"))
using (var connection = new OdbcConnection(String.Format("DSN={0};Uid={1};Pwd={2};", sageDsn, sageUsername, sagePassword)))
{
string sql = string.Format("SELECT 'STOCK_CODE' ,'Description',QTY_IN_STOCK - QTY_ALLOCATED AS 'FreeStock' FROM 'STOCK' where STOCK_CODE = '{0}'", productCode);
using (var command = new OdbcCommand(sql, connection))
{
connection.Open();

using (var reader = command.ExecuteReader())
{

while (reader.ReadAsync())
{
retDecimal = Convert.ToDecimal(reader["FreeStock"]);

}

}
}

return retDecimal;
}
}

最佳答案

如果 ReadAsync 不是真正的异步,您将需要使用单独的线程。

最简单的方法就是将整个方法调用放入一个Task中:

decimal d = await Task.Run(() => GetFreeStockFromSage(myProductCode));

使 GetFreeStockFromSage() 异步也是一种选择,但如果 ReadAsync 不是真正的异步,它就不会完美。您需要对任何 IO 绑定(bind)的对象使用 async 方法,例如 SqlConnection.OpenAsync()SqlCommand.ExecuteReaderAsync()(假设这些实际上是真正异步的)。然后,您需要将 while(reader.Read()) 循环移动到它自己的任务中,这样它就不会阻塞 UI 线程。

关于c# - 了解与 odbc 相关的异步方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55587752/

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