2012-01-30 83 views
1

數據集的行是否有任何限制。基本上我需要使用從SQL服務器提取的數據生成excel文件並添加格式。我有兩種方法。要麼獲取高質量的數據(大約4,50,000行)並循環訪問.net代碼或循環訪問大約160條記錄,將每條記錄作爲輸入傳遞給處理程序,獲取相關數據,生成文件並移至下一個160。哪種方法最好?有沒有其他方式可以處理? 如果我一次獲取450000條記錄,我的應用程序會崩潰嗎?數據集容量

感謝, 羅希特

+0

我的經驗法則是ASP.NET應用程序將在4000-5000個數據集行上回收。對於winforms,我會大量猜測這個數量乘以你擁有的內存數量(每GB內存5K行)。該數據集大量空間效率低下,更糟糕,需要完全記憶。如果您設法將一百萬行加載到數據集中,則整個計算機的行爲就好像處於極低內存條件下一樣。 – MatthewMartin 2012-01-30 16:27:49

回答

0

基本上我需要生成與從SQL Server中提取數據的Excel文件,並添加格式

的數據集通常是不理想這一點。加載數據集的過程在它上面循環,然後放棄它,意味着直到最後一行被處理後,第一行中的內存纔會被釋放。

您應該改用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(); 
} 
+0

你建議選擇1還是2? – RRForUI 2012-01-30 16:18:50

+0

您應該使用DataReader。這將允許您處理每個記錄作爲其檢索。這樣您就不必關心限制從數據庫中檢索的行。這似乎沒有在你提到的兩個選項 – 2012-01-30 16:26:44

+0

我不能使用數據讀取器,因爲它一次只返回1行。我的數據是像下面
公司\t部門\t的Emp名稱 ABC \t賬戶\t名稱1 ABC \t技術\t名稱2 ABC \t營銷\t名稱3個 DEF \t賬戶\t名稱4 DEF \t技術\t名稱5 DEF \t Marketing \t名稱6 GHI \t賬戶\t名稱7 GHI \t技術\t Nam e 8 GHI \t營銷\t名稱9 這裏每個公司和部門組合將有1 esxel文件 – RRForUI 2012-01-30 16:41:58

1

你不應該試圖在同一時間閱讀第4個千萬行到應用程序的輪廓。您應該改用DataReader或其他類似遊標的方法,並一次查看每行的數據。否則,即使您的應用程序確實運行,它也會非常緩慢並耗盡計算機的所有資源