Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在执行SQL任务中获取SqlDataReader而不是记录集_C#_.net_Sql Server_Ssis - Fatal编程技术网

C# 在执行SQL任务中获取SqlDataReader而不是记录集

C# 在执行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

我可以将SQL结果集存储到ADODB记录集或ADO.NET记录集中。在.NET中 我可以使用.NET连接管理器,获取.NET数据集,从中提取数据表 此数据集并使用它。问题是我的内存中有大约30-40K行。 我不想那样做。我想将SqlDataReader放入某种.NET记录集中 这样我就可以逐行阅读,而不是一次全部阅读。我该怎么做呢?我只想使用C和.NET


谢谢。

.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有点晚了。这将只读取一行。