当我从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')
Run Code Online (Sandbox Code Playgroud)
但不知何故,下面这段代码返回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);
Run Code Online (Sandbox Code Playgroud)
连接打开很好,因为如果我硬编码不同的SQL查询,我会得到结果.
是否有任何理由查询在SQL查询工具中可以正常工作,但不是从我的C#代码?
更新说明: 在我的代码中,当我删除:
and (slice_date < '01-Dec-10')
Run Code Online (Sandbox Code Playgroud)
它似乎工作正常(我得到数据).任何线索上述标准有什么问题?
我将回答您更新中的最后一部分.
'01-Dec-10'是一个字符串.这不是约会.它与日期无关.直到它被转换为日期.(据我所知)有三种方法可以做到这一点.
date '2010-12-01',始终为iso日期YYYY-MM-DD如果您的NLS设置为'DD-MON-RR',则字符串'01 -Dec-10'将转换为2010-12-01(2010年12月1日).另一方面,如果您的设置是'RR-MON-DD',它将被转换为'2001-12-10'(2001年12月10日).
我不知道你的设置,既然你也没有,你应该做正确的事情,那就是总是明确地使用TO_DATE()或日期文字.