当前位置: 首页 > 知识库问答 >
问题:

如何将异步的返回类型任务转换为C#中的DataView

韩征
2023-03-14

下面的方法调用RetrieveRecords方法,该方法是异步的,返回类型为Task<DataView>。调用方法接受datatype作为DataView。现在我得到一个错误“不能从System.Data.DataView转换到System.Task.DataView。我知道这个错误是由于类型转换不匹配造成的。我如何将任务<DataView>转换到DataView。这对我来说是非常必要的。我做了很多研究,但没有找到解决方案。

public DataView endresult()
{
DataView result = RetrieveRecords(sqlCommand)
}

返回类型为Task<DataView>的异步方法

public async Task<DataView> RetrieveRecords(SqlCommand sqlCommand)
{
    return await ExecuteDV(sqlCommand);
}

public DataView ExecuteDV(SqlCommand sqlCommand)
{

    exceptionMessage = string.Empty;
     resultType = (int)Helper.ServiceActionType.Success;
    var table = new DataTable();
    DataView dv = null;
    try
    {
        using (SqlConnection con = new SqlConnection(DBAccess.ConnString))
        {
            sqlCommand.Connection = con;

            con.Open();
            SqlDataReader dr = sqlCommand.ExecuteReader();
            table.Load(dr);

            if (table.Rows != null && table.Rows.Count > 0)
            {
                dv = table.DefaultView;
            }
            else
            {
                resultType = (int)Helper.ServiceActionType.DataNotFound;
            }
            con.Close();
        }
    }

    return dv;

}

共有1个答案

程成天
2023-03-14

您的代码目前无法编译。我假设这个方法签名是正确的:

public DataView ExecuteDV(SqlCommand sqlCommand);

在这种情况下,RetrieveRecords不能Await结果,因此:

public DataView RetrieveRecords(SqlCommand sqlCommand)
{
  return ExecuteDV(sqlCommand);
}

你的“最终结果”当然是:

public DataView endresult()
{
  DataView result = RetrieveRecords(sqlCommand);
  return result;
}
public async Task<DataView> ExecuteDVAsync(SqlCommand sqlCommand);
public async Task<DataView> RetrieveRecordsAsync(SqlCommand sqlCommand)
{
  return await ExecuteDVAsync(sqlCommand);
}
public async Task<DataView> endresultAsync()
{
  DataView result = await RetrieveRecordsAsync(sqlCommand);
  return result;
}
 类似资料:
  • 我有一个函数从服务器获取一个文件并解析了该文件,我正在使用一个具有如下完成处理程序的函数来获取该文件 但是,当我尝试使用该函数时 我得到无法将类型“()”的返回表达式转换为返回类型“String”的错误。 知道我做错了什么吗?

  • 我想创建一个任务来运行串行命令。此时,我不需要从正在进行工作的方法返回任何内容。这可能会在以后发生变化,但我现在很好奇这是如何发生的。 这就是我所拥有的。我想为任务使用单独的方法,而不是创建匿名操作。我尝试返回void,结果是“void不能显式转换为任务”。我也试过了<代码>任务 在此过程中,我使用了一个线程来完成这项任务,但这次我想使用任务。 预计到达时间: 最后,这是我的完整解决方案

  • 我一直在使用异步任务来访问web服务器,并使用结果更新控件。这有缺点,即它使异步方法特定于控件,并阻止我再次使用返回的字符串。 我的典型asyncTask代码如下

  • 我试图弄清楚如何处理从返回的数据。 我有一个活动,我正在调用异步Firebase get操作(存在于其他类中的操作),并且我想使用检索到的ArrayList的大小更新活动中存在的。以下是我在活动创建中获取的 Firebase 调用: 这是我的Firebase操作: 在Android中,最好的方法是什么?是否有可能实现各种适配器或完成处理程序?

  • 问题内容: 我有一个想要表示为C#类的复杂JSON对象。我在名为“ Form”的父类上有一个良好的开端,但是如何代表不同类型的集合(请参见下面的“ elements”对象)? 这是JSON对象: 我开始的课程看起来像这样: 如何处理“ elements”属性以获得所需的JSON输出? 我正在WCF 4.0和web.config中的以下属性一起使用:automaticFormatSelectionE

  • 问题内容: 有没有一种方法可以将对象强制转换为方法的返回值?我尝试过这种方式,但在“ instanceof”部分给出了编译时异常: 我也尝试过这个,但是它给出了运行时异常ClassCastException: 有没有一种简便的方法可以做到这一点: 编辑:我写了正确答案的工作副本: 问题答案: 您必须使用实例,因为在编译过程中会擦除通用类型。 该方法的声明是: 这也可以用于数组类型。它看起来像这样: