datatable加载大数据c#

时间:2017-06-14 05:17:54

标签: c# sql-server asp.net-mvc-4 ado.net

在我的c#mvc 4应用程序项目中,我们需要从sqlquery中获取数据,然后填充到C#datatable中。 我们必须用超过500万行和12列填充数据表。

如果数据<1百万,则应用程序需要3分钟。 如果它是> 100万系统被绞死。

这是我正在使用的代码。

public DataTable GetTheData()
    {
        DataTable dtDataTablesList = new DataTable();
        string NewconnectionString ="Mycooectionstring";
        SqlConnection spContentConn = new SqlConnection(NewconnectionString);
        string sqlselectQuery = "select * from table";
        try
        {
            spContentConn.Open();
            SqlCommand sqlCmd = new SqlCommand(sqlselectQuery, spContentConn);
            sqlCmd.CommandTimeout = 0;
            sqlCmd.CommandType = CommandType.Text;
            sqlCmd.ExecuteNonQuery();
            SqlDataAdapter adptr = new SqlDataAdapter(sqlCmd);
            adptr.Fill(dtDataTablesList);
            spContentConn.Close();
        }
        catch (Exception ex)
        {
            throw ex;
        }
        finally
        {
            if (spContentConn != null)
                spContentConn.Dispose();
        }
        return dtDataTablesList;
    }

1 个答案:

答案 0 :(得分:1)

为什么一次只能显示10万卢比的记录。您应该使用分页和限制记录数。我建议如果你有那么大的记录显示那么你应该一次显示最多500条记录。即使500条记录也很大,所以你可以减少数量。通过与您的团队和客户讨论记录。

即使您设法在相当长的时间内加载所有这些记录,浏览器也无法处理那么多记录并可能崩溃。但这只是我的假设没有经过测试和验证。

您可以参考以下SQL代码进行分页

create table #TestTable(
 PK int primary key,
 Name nvarchar(50)
)

insert into #TestTable (PK, Name) values
(1, 'Name1'),
(4, 'Name4'),
(6, 'Name6')

select * from
(
 select row_number() over(ORDER BY pk ) SN, * from #TestTable
) temp
where SN>=1 and SN<=500

1和500应该是动态的。在第1页中,您在第2页中传递1和500,您应该传递501和1000.