Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/261.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 控制在sqldataadapter中填充的recrocds数量_C#_Sqldataadapter - Fatal编程技术网

C# 控制在sqldataadapter中填充的recrocds数量

C# 控制在sqldataadapter中填充的recrocds数量,c#,sqldataadapter,C#,Sqldataadapter,我正在用来自远程服务器的数千条记录填充sqldataadapter。在此期间,应用程序将冻结,直到提取数据结束。有时需要几分钟,有时需要更长时间,这取决于服务器的可用性,所以用户永远不知道下载了多少记录以及过程何时完成。出于这个原因,我想实现某种计数器,计算完成下载过程还需要多少记录 以下是我填充sqldataadapter的方式: void FillDataAdapter(string sQuery) { SqlDataAdapter m

我正在用来自远程服务器的数千条记录填充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中获取当前记录数?

我认为这是不可能的,但您可以利用

public int Fill(
    int startRecord,
    int maxRecords,
    params DataTable[] dataTables
)

重载fill方法以获取所需的记录数。

您可以在此处使用threadpool异步调用该数据库连接。这里有一些链接供您帮助。

如果您在这里使用计数器,那么您也必须等到所有数据都被提取出来。但是,如果您使用threadpool,那么您不必等待执行这部分代码。当这部分代码执行时,其他部分代码也将执行。提取完所有数据后,可以显示此时的所有数据。您不必担心没有响应或服务器繁忙的问题