2017-06-14 144 views
1

在我的c#mvc 4应用程序项目中,我们需要从sqlquery中取数据然后填入C#数据表。 我们必须填写超过5百万行和12列的数据表。datatable加载大数据c#

如果数据已经< 100万的申请需要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; 
    } 
+0

您打算如何处理1M记录?你无法在任何地方展示他们。处理它们是数据库的用途。 Web应用程序永远不会运行得更快,因为写入的查询具有合适的索引。你想做什么? –

+0

顺便说一句,你应该使用'use'块代替这个'try/finally'和外部的'catch',它只是简单地打破了调用堆栈。 –

回答

1

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

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

你可以参考下面的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.