从 C# 应用程序执行时,Oracle SQL 语句 returns 没有行

Oracle SQL statement returns no rows when executed from C# application

以下 SQL 语句 returns 在 Oracle 中执行时的数据 SQL 开发人员:

SELECT TC_GUID FROM TBLBUF WHERE TC_DEST = 'aaaaaaa' AND TC_STATE <= 20

但是当它在下面的 C# 代码中执行时,reader returns 没有行。

using Oracle.ManagedDataAccess.Client;
using System;
using System.Data;
using System.Data.Common;
using System.Threading;
using System.Threading.Tasks;

namespace OracleQuery
{
    public class Program
    {
        public static DbDataReader QueryReader()
        {
            OracleConnection connection = new OracleConnection(".........");
            connection.Open();
            using (OracleCommand command = connection.CreateCommand())
            {
                command.InitialLOBFetchSize = -1;
                command.InitialLONGFetchSize = -1;
                ((IDbCommand)command).Transaction = null;
                command.CommandText = "SELECT TC_GUID FROM TBLBUF WHERE TC_DEST = 'aaaaaaa' AND TC_STATE <= 20";
                command.CommandType = CommandType.Text;
                return command.ExecuteReader(CommandBehavior.Default | CommandBehavior.CloseConnection);
            }
        }

        public static void Main(string[] args)
        {
            DbDataReader reader = QueryReader();
            while (reader.Read())
            {
                string s = (string)reader["TC_GUID"];
                Console.WriteLine(s);
            }
        }
    }
}

当我只留下 WHERE 子句的一部分时,TC_DEST = 'aaaaaaa'TC_STATE <= 20,它 returns 行。

造成这种行为的原因是什么?

What could be a reason for such behaviour?

INSERTed 但未 COMMITed 的行仅在创建它们的会话中可见。因此,如果您创建了一些新行但没有在 SQL 开发人员会话中发出 COMMIT 命令,您将无法从任何其他会话中看到未提交的数据(即使您连接为相同的用户,因为它将创建不同的会话)。

如果是这种情况,解决方案是 COMMIT SQL 开发人员会话中的数据,然后其他会话就可以看到这些数据。