SqlDataReader和网络延迟

时间:2016-01-11 12:38:54

标签: c# sql sql-server

从Windows应用程序中加载数据以进行离线处理。我使用SqlDataReader和bulkcopy执行此操作。见下面的代码

但是我的一个表包含大约10,000行。当与数据库服务器在同一网络上时,过程大约需要2秒钟。通过VPN连接和宽带路由器连接大约需要70秒。这是由于SqlDataReader逐行传递结果的方式导致的网络延迟。

当有许多记录时,是否有比SqlDataReader更快的方法来检索数据。

    public void bulkCopyTable(string getDataStoredProcedure, string destinationTable)
    {
        using (SqlConnection MasterConnection = new SqlConnection(MasterServerDbConnectionString))
        {
            MasterConnection.Open();

            using (SqlConnection connection = new SqlConnection(localDbConnectionString))
            {
                connection.Open();

                SqlCommand cmdMasterData = new SqlCommand(getDataStoredProcedure, MasterConnection);
                cmdMasterData.CommandType = CommandType.StoredProcedure;

                SqlParameter paramMasterData1 = new SqlParameter("@getAll", SqlDbType.Bit);
        paramMasterData1.Value = 1;
                cmdMasterData.Parameters.Add(paramMasterData1);

                cmdMasterData.CommandTimeout = 60;

                using (SqlDataReader dataReaderMasterData = cmdMasterData.ExecuteReader())
                {
                    using (SqlBulkCopy bulkCopy = new SqlBulkCopy(AutoProgConnection))
                    {
                        bulkCopy.DestinationTableName = destinationTable;

                        try
                        {
                            // Write from the source to the destination.
                            bulkCopy.WriteToServer(dataReaderMasterData);
                        }
                        catch (Exception ex)
                        {
                            ...
                        }
                    }                        
                }
            }
        }
    }

1 个答案:

答案 0 :(得分:0)

有多种方法可以检索数据。不幸的是,当有很多记录时,它们似乎都在内部使用Datareader导致延迟。正如Allan提出的,我将以另一种方式传输数据。我将创建一个webservice,它返回一个DataSet或以压缩格式获取数据。