我可以將我的SQL結果集存儲到ADODB記錄集或ADO.NET記錄集中。在.NET 我可以使用.NET連接管理器,獲取.NET數據集,從這個DataSet中提取數據表並從中使用它。問題是我在記憶中獲得大約30-40K行。 我不想那樣做。我想將SqlDataReader變成「某種.NET記錄集」 ,這樣我就可以逐行讀取,而不是一次全部讀取。我如何做到這一點?我只想使用C#和.NET。在執行SQL任務中獲取SqlDataReader而不是RecordSet
謝謝。
我可以將我的SQL結果集存儲到ADODB記錄集或ADO.NET記錄集中。在.NET 我可以使用.NET連接管理器,獲取.NET數據集,從這個DataSet中提取數據表並從中使用它。問題是我在記憶中獲得大約30-40K行。 我不想那樣做。我想將SqlDataReader變成「某種.NET記錄集」 ,這樣我就可以逐行讀取,而不是一次全部讀取。我如何做到這一點?我只想使用C#和.NET。在執行SQL任務中獲取SqlDataReader而不是RecordSet
謝謝。
.NET提供了幾種類型集合列表中,一個HashSet ....
所有這些都將保留在內存中記錄
DataTable中有許多功能和內存開銷
創建適當的類物業
List<MyClass> MyClasses = new List<MyClass>();
String strSQL = "select * from Table01";
SqlCommand cmd = new SqlCommand { Connection = Cn, CommandText = strSQL };
try
{
Cn.Open();
SqlDataReader sdr = cmd.ExecuteReader();
while (sdr.Read())
{
MyClasses.Add(new MyClass(sdr.GetValue(0));
}
sdr.close();
}
catch (Exception Ex) {}
finally
{
Cn.Close();
}
30-40K並不是那麼大,除非你的行很大。
我已經使用超過100萬的收藏。
SqlDataReader sdr;
var strSQL = "select * from Table01";
var cmd = new SqlCommand { Connection = Cn, CommandText = strSQL };
try
{
sdr = cmd.ExecuteReader();
sdr.Read();
if (sdr.HasRows)
{
var field = sdr.GetValue(0);
// and so on....
}
dtrContID.Close();
}
catch (Exception err)
{
// .......
}
如果您想通過行處理您的數據行,這一切無法加載到內存中,然後你爲什麼不編寫自定義轉換:這裏是東西給你一個想法:http://technet.microsoft.com/en-us/library/ms136027.aspx
使用現有的連接管理器的源和目標,並將腳本組件置於您的自定義行之間進行處理。
這將通過它使用所有的SSIS原生能力(在不需要的時候再和回退)僅排的最佳量轉移到內存緩衝區
這是一個有點晚優勢排處理數據行在讀取之後測試HasRows。這隻會讀一行。 – Paparazzi