加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 方法“部分”返回

发布时间:2020-12-15 21:48:57 所属栏目:百科 来源:网络整理
导读:我正在开发一种在非常大的表中搜索信息的方法.由于我不使用ORDER BY或查询中的任何特殊内容(只是一个简单的SELECT id,描述FROM抱怨WHERE描述,如’你的文字在这里’),我希望通过返回批量结果来提供更加动态的用户体验这与在Management Studio中运行查询类似.
我正在开发一种在非常大的表中搜索信息的方法.由于我不使用ORDER BY或查询中的任何特殊内容(只是一个简单的SELECT id,描述FROM抱怨WHERE描述,如’你的文字在这里’),我希望通过返回批量结果来提供更加动态的用户体验这与在Management Studio中运行查询类似.

一些细节,我的调用堆栈并不大,但不是一切都在同一个方法.有buttonSearchClick,performCleanSearch和searchComplainBasedOnDetailInfo,每个都在不同的层(分别是Interface,SearchBLL和SearchDAL).

我想过创建一个异步方法来填充像List< Complain>这样的东西.但这似乎并不干净.我必须制作3层异步.有没有人对如何实现这个有更好的想法?或者这是最好的方法吗?

Edit1:我已经设法使用SqlCommand.BeginExecuteReader连接到连接字符串上的异步处理,以便在查询出现时从查询中获取结果…现在我必须想办法让我的DAL方法保持异步,所以上层图层也可以获取结果async …我正在考虑实现某种缓冲…也许是一个队列……

编辑2:我不是在寻找一个寻呼解决方案或推特(滚动和搜索新结果的地方),因为我知道用户必须阅读所有获取的信息……

解决方法

您可以使用BackgroundWorker,在DoWork中让您的批次执行以下操作:

DataTable dt;
int iRecords = 0;
do
{
  dt = new DataTable();
  using(SqlConnection con = new SqlConnection(""))
  {
    SqlCommand cmd = new SqlCommand(string.Format("SELECT TOP 100 * FROM complain where ID > {0}",iRecords));
    SqlDataAdapter sda = new SqlDataAdapter(cmd);
    sda.Fill(dt);
    //Report your progress here
  }
} while(dt.Rows.Count != 0)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读