在Read()方法中OracleDataReader的奇怪行为

时间:2014-03-21 23:38:27

标签: c# oracle

所有Oracle专家,

我有一个非常非常简单的程序的相当奇怪的行为,仅用于测试从C#远程Oracle数据库获取基本数据。

我创建了一个简单的C#程序,如下所示:

using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Text;
using Oracle.ManagedDataAccess.Client;

class Program
{
  static void Main(string[] args)
  {
    var connectionString = "Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP) (HOST={{Server}})(PORT=1521)))(CONNECT_DATA=(SERVICE_NAME={{DataSource}})));User Id={{Username}};Password={{Password}};";

    connectionString = connectionString.Replace("{{DataSource}}", "Actual service name");
    connectionString = connectionString.Replace("{{Server}}", "Actual Server IP");
    connectionString = connectionString.Replace("{{Username}}", "Actual username");
    connectionString = connectionString.Replace("{{Password}}", "Actual password");

    using (connection = new OracleConnection {ConnectionString = connectionString})
    {
      connection.Open();
      using ( var cmd = connection.CreateCommand() )
      {
        cmd.CommandText = "SELECT * FROM Table";
        using (var reader = cmd.ExecuteReader())
    {
      while (reader.Read())
      {
        i++;
      }
    }
      }
    }
  }
}

我正在阅读的表有220.000个条目,代码的问题是,在读取一定数量的“行”之后,阅读器就会停止。如果没有更多记录,它应该返回“false”,并且仍然有记录,但是Read()函数被调用并且永远不会返回。即使让它试了几个小时也不会回来。

有没有人有类似的经历?

我已经听说过不使用Microsoft Oracle数据驱动程序,所以我使用的是oracle中的那个。但问题仍然没有消失。

如果更改SQL命令,检索的行数会发生变化,但也不会以一种非常容易理解的方式更改:我认为如果这与网络缓冲区有关,我可以减少列以获取更多行,但它可以在相反的方向。更多列会产生更多行。

非常感谢任何帮助。

0 个答案:

没有答案