C# 在C中从SQL Server数据库加载大量数据#

C# 在C中从SQL Server数据库加载大量数据#,c#,sql-server,C#,Sql Server,我正在使用csvhelp创建一个.csv文件 这是我的代码: public async Task LoadLargeDataToCsvFile(string pFileName, string pSql) { SqlCommand cmd = new SqlCommand(pSql, GetSqlConnection); cmd.CommandType = CommandType.Text; cmd.CommandTimeout =

我正在使用
csvhelp
创建一个
.csv
文件

这是我的代码:

    public async Task LoadLargeDataToCsvFile(string pFileName, string pSql)
    {
        SqlCommand cmd = new SqlCommand(pSql, GetSqlConnection);
        cmd.CommandType = CommandType.Text;
        cmd.CommandTimeout = 0;

        using (StreamWriter writer = new StreamWriter(pFileName, false, Encoding.UTF8))
        {
            using (CsvWriter csvWriter = new CsvWriter(writer))
            {
                    csvWriter.Configuration.Delimiter = ";";
                    csvWriter.Configuration.RegisterClassMap<CChevalPropertiesMap>();

                using (SqlDataReader reader = await cmd.ExecuteReaderAsync())
                {
                    while (await reader.ReadAsync())
                    {
                        for (int i = 0; i < reader.FieldCount; i++)
                        {
                                csvWriter.WriteField(reader[i]);
                        }

                        await csvWriter.NextRecordAsync();
                    }

                    reader.Close();
                }
            }
        }
    }


我在表中有60000行和10列。

不管代码的csvhelper部分如何,SQL查询很可能需要很长时间。您是否尝试过单独运行SQL查询,并查看在SSMS或您选择的SQL管理器中需要多长时间?如果SQL性能仍然需要很长时间,那么有很多方法可以提高SQL性能minute@ChentalGraciaMigra-您是否尝试过加载表而不是写入流以查看问题所在?类似这样的东西:使用(var reader=await cmd.ExecuteReaderAsync(System.Data.CommandBehavior.SequentialAccess).ConfigureAwait(false)){dt.Load(reader);}@ChentalGraciaMigra-为什么需要通过Task.Run()调用,而不是通过result=await cConnection.LoadLargeDataFromSqlToCsvFile调用(args[0],args[1])?这是一个或另一个。但我理解。不是加载而是读取产品文件需要两个多小时的时间。
await Task.Run(()=> cConnection.LoadLargeDataFromSqlToCsvFile(args[0], args[1]));
IAsyncResult result;

result = Task.Run(()=> cConnection.LoadLargeDataFromSqlToCsvFile(args[0], args[1]));

while (!result.IsCompleted)
{
    Application.DoEvents();
}