我正在从远程服务器填充数百条记录的sqldataadapter。在此期间,应用程序冻结,直到提取数据结束。有时需要花费几分钟时间,这取决于服务器的可用性,因此用户永远不会知道下载了多少记录以及何时完成该过程。出于这个原因,我想实现一些计数器剩余的记录以完成下载过程。
这就是我填写sqldataadapter的方法:
void FillDataAdapter(string sQuery)
{
SqlDataAdapter mySqlDataAdapter;
SqlCommandBuilder mySqlCommandBuilder;
DataTable dataTable;
mySqlDataAdapter = new SqlDataAdapter(sQuery, this.connection);
mySqlCommandBuilder = new SqlCommandBuilder(mySqlDataAdapter);
mySqlDataAdapter.SelectCommand.CommandTimeout = 30;
dataTable = new DataTable();
mySqlDataAdapter.Fill(dataTable);
}
在此行应用程序freezs直到填充完成:
mySqlDataAdapter.Fill(dataTable);
Fill方法有int返回数据类型但是我只能在填充完成后获得数据适配器中的记录数。我可以通过哪种方式获取dataadapter中的当前记录数量?
答案 0 :(得分:0)
我认为这是不可能的,但你可以利用
public int Fill(
int startRecord,
int maxRecords,
params DataTable[] dataTables
)
重载填充方法以获取所需的记录数。
答案 1 :(得分:0)
您可以在此处使用threadpool异步调用该数据库连接。以下是您的帮助链接。 http://msdn.microsoft.com/en-us/library/3dasc8as.aspx http://www.codeproject.com/Articles/7933/Smart-Thread-Pool
如果你在这里使用计数器,那么你必须等到所有数据都被提取出来。但是如果使用线程池,则不必等待执行该部分代码。当执行这部分代码时,代码的其他部分也将被执行。获取所有数据后,您可以显示当时的所有数据。您不必担心没有响应或服务器繁忙的问题。