我正在开发一种在非常大的表中搜索信息的方法。因为我不使用 ORDER BY
或查询中的任何特殊内容(只是一个简单的 SELECT id,description FROM complain WHERE description like 'YOUR TEXT HERE'"
),我希望通过返回成批结果来提供更动态的用户体验。这类似于在 Management Studio 中运行查询。
一些细节,我的调用堆栈并不大,但并非所有内容都在同一个方法中。有 buttonSearchClick
, performCleanSearch
和 searchComplainBasedOnDetailInfo
每个都在不同的层(分别是接口(interface)、SearchBLL 和 SearchDAL)。
我考虑过创建一个异步方法来填充类似 List<Complain>
的东西但这似乎并不干净。我将不得不制作 3 层异步。有没有人对如何实现这个有更好的想法?或者这是最好的方法吗?
Edit1: 我已经设法在连接字符串上使用 SqlCommand.BeginExecuteReader 和异步处理来从查询中获取出现的结果...现在我必须想办法使我的 DAL 方法异步,以便上层也可以异步获取结果...我正在考虑实现某种缓冲区...也许是一个队列...
Edit2: 我不是在寻找分页解决方案或类似 Twitter 的解决方案(您可以在其中滚动并搜索新结果),因为我知道一个事实,即用户必须阅读所有正在获取信息...
最佳答案
您可以使用 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)
关于c# - 方法 "Partial"返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15387609/