首页 > 解决方案 > 需要用异步数据库请求返回 SqlDataReader

问题描述

以下方法在 SQL Server 数据库中执行查询:

private bool authenticated(SqlConnection conn)
{
    string query = "some sql query";
    SqlCommand cmd = new SqlCommand(query, conn);

    // the intent is to change this to: SqlDataReader reader = await cmd.ExecuteReaderAsync();
    SqlDataReader reader = cmd.ExecuteReader();

    if (!reader.HasRows)
    {
       return false;
    }

    while (reader.Read())
    {
        // do some stuff
       /*
        if (some condition)
            return true;
       */
    }
}

执行查询的方法调用需要更改为异步版本。但是,该方法需要更改为async. 此类方法不能返回除voidor以外的任何内容Task。已经考虑为查询执行编写另一个方法,但aysnc方法不能带ref参数。最好的方法是什么?

标签: c#.netsql-serversql-server-2008asynchronous

解决方案


Task<T>可以返回你需要的东西。

private async Task<bool> authenticated(SqlConnection conn)
{
    string query = "some sql query";
    SqlCommand cmd = new SqlCommand(query, conn);

    // the intent is to change this to: SqlDataReader reader = await cmd.ExecuteReaderAsync();
    SqlDataReader reader = await cmd.ExecuteReaderAsync();

    if (!reader.HasRows)
    {
       return false;
    }

    while (reader.Read())
    {
        // do some stuff
        if (some condition)
            return true;
    }
}

推荐阅读