当我从 Oracle 的 SQL 开发人员工具运行它时,我有以下 SQL 查询工作正常(返回多行):
select * from [schema].[table] where resource_unique_name in ('abc123') and (slice_date >= '01-Nov-10') and (slice_date < '01-Dec-10')
但是下面这段代码以某种方式返回了 0 条记录(没有错误,只有 0 条记录):
OracleDataReader reader = new OracleDataReader();
const string CONNECTION_STRING = [myConnetionString];
connection.ConnectionString = CONNECTION_STRING;
connection.Open();
OracleCommand command = connection.CreateCommand();
command.CommandText = [same SQL as above];
OracleDataReader reader = command.ExecuteReader();
int rowCount = 0;
while (reader.Read())
{
rowCount++;
}
Console.Write(rowCount);
连接打开很好,因为如果我对不同的 SQL 查询进行硬编码,我确实会得到结果。
有什么原因可以使查询在 SQL 查询工具中正常工作,但在我的 C# 代码中却不能正常工作吗??
更新说明: 在我的代码中,当我删除:
and (slice_date < '01-Dec-10')
它似乎工作正常(我取回数据)。上述标准有什么问题吗??
最佳答案
我会回答你更新的最后一部分。
'01-Dec-10'
是一个字符串。这不是约会。它与日期无关。直到它被转换成日期。有(据我所知)三种方法。
- 使用 TO_DATE()
- 将日期文字指定为
date '2010-12-01'
,它始终是等日期 YYYY-MM-DD - 使用 NLS 设置(您正在做的)依赖隐式日期转换
如果您的 NLS 设置为 'DD-MON-RR'
,则字符串 '01-Dec-10' 将转换为 2010-12-01(12 月 1 日, 2010).另一方面,如果您的设置是 'RR-MON-DD'
,它将被转换为 '2001-12-10'
(10 :2001 年 12 月)。
我不知道您的设置,因为您也不知道,所以您应该做正确的事情,那就是始终显式使用 TO_DATE() 或日期文字。
关于c# - 这个 SQL 查询如何在 Oracle SQL Developer 中运行而不是在代码中运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4518916/