c# - 这个 SQL 查询如何在 Oracle SQL Developer 中运行而不是在代码中运行?

标签 c# sql oracle

当我从 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' 是一个字符串。这不是约会。它与日期无关。直到它被转换成日期。有(据我所知)三种方法。

  1. 使用 TO_DATE()
  2. 将日期文字指定为 date '2010-12-01',它始终是等日期 YYYY-MM-DD
  3. 使用 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/

相关文章:

c# - 使用 DataContractSerializer 序列化时删除已知类型的命名空间

c# - DataGridView with DataTable 数据源 : how to efficiently extract selected rows?

c# - WebApi 2 GET 在参数中有特殊字符

sql - 如何获取postgresql中的前10个值?

java - DB2-Java 驱动程序

oracle - 从复合主键表中删除重复项

c# - 深度嵌套动态结构的 YamlDotNet 反序列化

php - mysql 查询以获取匹配的记录

sql - 如何为Oracle中的列和固定值的组合赋予唯一约束?

c# - Oracle.ManagedDataAccess dbcontext 脚手架预期程序集属性名为 DesignTimeProviderServicesAttribute 错误