數據集的行是否有任何限制。基本上我需要使用從SQL服務器提取的數據生成excel文件並添加格式。我有兩種方法。要麼獲取高質量的數據(大約4,50,000行)並循環訪問.net代碼或循環訪問大約160條記錄,將每條記錄作爲輸入傳遞給處理程序,獲取相關數據,生成文件並移至下一個160。哪種方法最好?有沒有其他方式可以處理? 如果我一次獲取450000條記錄,我的應用程序會崩潰嗎?數據集容量
感謝, 羅希特
數據集的行是否有任何限制。基本上我需要使用從SQL服務器提取的數據生成excel文件並添加格式。我有兩種方法。要麼獲取高質量的數據(大約4,50,000行)並循環訪問.net代碼或循環訪問大約160條記錄,將每條記錄作爲輸入傳遞給處理程序,獲取相關數據,生成文件並移至下一個160。哪種方法最好?有沒有其他方式可以處理? 如果我一次獲取450000條記錄,我的應用程序會崩潰嗎?數據集容量
感謝, 羅希特
基本上我需要生成與從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();
}
你建議選擇1還是2? – RRForUI 2012-01-30 16:18:50
您應該使用DataReader。這將允許您處理每個記錄作爲其檢索。這樣您就不必關心限制從數據庫中檢索的行。這似乎沒有在你提到的兩個選項 – 2012-01-30 16:26:44
我不能使用數據讀取器,因爲它一次只返回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
你不應該試圖在同一時間閱讀第4個千萬行到應用程序的輪廓。您應該改用DataReader或其他類似遊標的方法,並一次查看每行的數據。否則,即使您的應用程序確實運行,它也會非常緩慢並耗盡計算機的所有資源
我的經驗法則是ASP.NET應用程序將在4000-5000個數據集行上回收。對於winforms,我會大量猜測這個數量乘以你擁有的內存數量(每GB內存5K行)。該數據集大量空間效率低下,更糟糕,需要完全記憶。如果您設法將一百萬行加載到數據集中,則整個計算機的行爲就好像處於極低內存條件下一樣。 – MatthewMartin 2012-01-30 16:27:49