C# 在执行SQL任务中获取SqlDataReader而不是记录集
我可以将SQL结果集存储到ADODB记录集或ADO.NET记录集中。在.NET中 我可以使用.NET连接管理器,获取.NET数据集,从中提取数据表 此数据集并使用它。问题是我的内存中有大约30-40K行。 我不想那样做。我想将SqlDataReader放入某种.NET记录集中 这样我就可以逐行阅读,而不是一次全部阅读。我该怎么做呢?我只想使用C和.NETC# 在执行SQL任务中获取SqlDataReader而不是记录集,c#,.net,sql-server,ssis,C#,.net,Sql Server,Ssis,我可以将SQL结果集存储到ADODB记录集或ADO.NET记录集中。在.NET中 我可以使用.NET连接管理器,获取.NET数据集,从中提取数据表 此数据集并使用它。问题是我的内存中有大约30-40K行。 我不想那样做。我想将SqlDataReader放入某种.NET记录集中 这样我就可以逐行阅读,而不是一次全部阅读。我该怎么做呢?我只想使用C和.NET 谢谢。.NET有几种类型的集合列表、哈希集。。。。 SqlDataReader sdr; var strSQL = "select * fro
谢谢。.NET有几种类型的集合列表、哈希集。。。。
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)
{
// .......
}
所有这些都会将记录保存在内存中
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万个集合。.NET有几种类型的集合列表、哈希集。。。。 所有这些都会将记录保存在内存中 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万个集合。.NET有几种类型的集合列表、哈希集。。。。 所有这些都会将记录保存在内存中 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万个集合。.NET有几种类型的集合列表、哈希集。。。。 所有这些都会将记录保存在内存中 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万个集合。如果您想逐行处理数据,而不是将其全部加载到内存中,那么为什么不编写一个自定义转换代码:这里有一些东西可以让您了解: 将现有连接管理器用于源和目标,并在两者之间放置一个脚本组件,用于自定义逐行处理
这将逐行处理数据,其优点是它使用了所有SSI的本机功能,仅将最佳数量的行转移到内存缓冲区中,并在不需要时再次返回。如果您希望逐行处理数据,而不是将其全部加载到内存中,那么为什么不编写一个自定义转换代码呢你有一个想法: 将现有连接管理器用于源和目标,并在两者之间放置一个脚本组件,用于自定义逐行处理
这将逐行处理数据,其优点是它使用了所有SSI的本机功能,仅将最佳数量的行转移到内存缓冲区中,并在不需要时再次返回。如果您希望逐行处理数据,而不是将其全部加载到内存中,那么为什么不编写一个自定义转换代码呢你有一个想法: 将现有连接管理器用于源和目标,并在两者之间放置一个脚本组件,用于自定义逐行处理
这将逐行处理数据,其优点是它使用了所有SSI的本机功能,仅将最佳数量的行转移到内存缓冲区中,并在不需要时再次返回。如果您希望逐行处理数据,而不是将其全部加载到内存中,那么为什么不编写一个自定义转换代码呢你有一个想法: 将现有连接管理器用于源和目标,并在两者之间放置一个脚本组件,用于自定义逐行处理
这将逐行处理数据,其优点是它使用了所有SSI本机功能,仅将最佳数量的行转移到内存缓冲区中,并在不需要时再次退出。读取后测试HasRows有点晚了。这将只读取一行。在读取之后测试HasRows有点晚了。这将只读取一行。在读取之后测试HasRows有点晚了。这将只读取一行。在读取之后测试HasRows有点晚了。这将只读取一行。