所有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命令,检索的行数会发生变化,但也不会以一种非常容易理解的方式更改:我认为如果这与网络缓冲区有关,我可以减少列以获取更多行,但它可以在相反的方向。更多列会产生更多行。
非常感谢任何帮助。