数据集容量

时间:2012-01-30 15:45:20

标签: ado.net

数据集的行数是否有限制。基本上我需要使用从SQL服务器提取的数据生成excel文件并添加格式。我有两种方法。获取enntire数据(大约4,50,000行)并循环遍历.net代码中的那些或循环遍历大约160条记录,将每条记录作为proc的输入传递,获取相关数据,生成文件并移至160的下一条。哪种方式最好?有没有其他方法可以处理? 如果我一次获取450000条记录,我的应用程序会崩溃吗?

谢谢, 罗希特夏尔

2 个答案:

答案 0 :(得分:1)

您不应该一次尝试将400万行读入您的应用程序。您应该使用DataReader或其他类似游标的方法,并一次查看一行数据。否则,即使您的应用程序运行,它也会非常慢并耗尽所有计算机的资源

答案 1 :(得分:0)

  

基本上我需要使用从SQL服务器提取的数据生成excel文件并添加格式

DataSet通常不是理想的选择。加载数据集,在其上循环然后丢弃数据集的过程意味着处理的第一行中的内存在处理完最后一行之前不会被释放。

您应该使用DataReader代替。一旦通过后续的Read调用处理完每行,就会丢弃这一行。

  

数据集的行数是否有限

至少由于DataRowCollection.Count属性是一个int,它限制为4,294,967,295行,但是可能还有一些其他约束使它变小。

根据你的评论,这是我如何构建循环的概述

using (connection)
{
    SqlCommand command = new SqlCommand(
               @"SELECT Company,Dept, Emp Name 
                 FROM Table 
                 ORDER BY Company,Dept, Emp Name );
    connection.Open();

    SqlDataReader reader = command.ExecuteReader();
    string CurrentCompany = "";
    string CurrentDept = "";
    string LastCompany = "";
    string LastDept = "";
    string EmpName = "";
    SomeExcelObject xl = null;

    if (reader.HasRows)
    {
        while (reader.Read())
        {
            CurrentCompany  = reader["Company"].ToString();
            CurrentDept = reader["Dept"].ToString();

            if (CurrentCompany != LastCompany || CurrentDept != LastDept)
            {  
                 xl = CreateNewExcelDocument(CurrentCompany,CurrentDept);
            }
            LastCompany = CurrentCompany;
            LastDept = CurrentDept;

           AddNewEmpName (xl, reader["EmpName"].ToString() );

        }
    }

    reader.Close();
}