C# OracleDataAdapter未从查询填充数据表

C# OracleDataAdapter未从查询填充数据表,c#,sql-server,oracle,C#,Sql Server,Oracle,我正在为我的应用程序配置文件中定义的SQL Server和Oracle数据库编写一个C应用程序。当我在SQL Server环境中运行代码时,它工作正常。我得到了正确的结果 SQL Server工作代码如下所示: sqlConn.Open(); stmt = "SELECT ACTION_ID, ACTION FROM DB.ACTIONS WHERE ACTION_DATE < GETDATE() AND STATUS = 'Pending'"; SqlDataAdapter sqlAda

我正在为我的应用程序配置文件中定义的SQL Server和Oracle数据库编写一个C应用程序。当我在SQL Server环境中运行代码时,它工作正常。我得到了正确的结果

SQL Server工作代码如下所示:

sqlConn.Open();
stmt = "SELECT ACTION_ID, ACTION FROM DB.ACTIONS WHERE ACTION_DATE < GETDATE() AND STATUS = 'Pending'";
SqlDataAdapter sqlAdapt = new SqlDataAdapter(stmt, sqlConn);
sqlAdapt.Fill(dt);
sqlConn.Close();
不工作的Oracle代码如下所示:

oraConn.Open();
stmt = "SELECT ACTION_ID, ACTION FROM DB.ACTIONS WHERE ACTION_DATE < SYSDATE AND STATUS = 'Pending'";
OracleDataAdapter oraAdapt = new OracleDataAdapter(stmt, oraConn);
oraAdapt.Fill(dt);
oraConn.Close();
我试图用结果填充数据表dt。我曾经尝试过先使用数据集,然后用数据集填充DataTable,但在Oracle中,当它在SQL Server中使用时,这是行不通的。好像少了一些简单的东西


我没有收到任何错误,我只是从Oracle得到一个0结果集,即使我知道有数据要提取。

直接在数据库上运行查询,例如使用sqlplus、TOAD、SQLDEveloper等。。它还回什么吗? 如果没有:

SQL Server中的文本比较状态='Pending'在Oracle中不区分大小写,它区分大小写。也许您在状态栏中有数据,例如“待定”

b是动作?日期是日期数据类型?如果是varchar,它就不会工作


希望有帮助。

我的建议是更改代码以分离诊断级别

1用简单的select sysdate from dual替换语句;查看是否有任何行返回

2如果没有返回任何内容,则可能是您的连接问题。查看您的连接属性

3如果数据集返回了某些内容,但没有填充,请尝试使用oracle reader抛出输出并查看结果


希望这能对您有所帮助。

问题是我登录数据库时使用的DBO帐户没有该表的权限。我办了一笔简单的赠款,效果很好

    GRANT SELECT ON DB.ACTIONS TO USER;

您使用的是什么版本的oracle,在oracle中是否使用任何模式命名?我使用的是10.2。本例中的模式是DB,尽管它实际上是其他东西。我能够在SQL Developer中运行查询,并得到2个结果。Oracle Database 10g Express Edition版本10.2.0.1.0-产品PL/SQL版本10.2.0.1.0-生产核心10.2.0.1.0 32位Windows生产TNS:版本10.2.0.1.0-生产NLSRTL版本10.2.0.1.0-是否允许您使用MS的OracleClient库或Oracle的ODP/Net?这是表中的权限问题。我必须将SELECT ON DB.ACTIONS授予角色;OracleDataAdapter知道表列,但即使我以DBO身份登录,也不会告诉我是否有访问表的权限。谢谢大家。查询在SQLDeveloper中运行良好。字段类型正确。Oracle:ACTION_DATE是DATE,status的字段值是Pending其他可能的原因:1可能太明显了,您是否使用SQLDeveloper插入了测试数据?如果是这样,您是否承诺进行交易?2您是否在SQLDeveloper和c应用程序中使用相同的用户名连接到db?我对此表示怀疑,但有可能在Oracle中创建一个策略,该策略可以向一个用户显示某些记录,并对其他用户隐藏这些记录行级安全性,在Oracle中称为VPD。这是表中的权限问题。我必须将SELECT ON DB.ACTIONS授予角色;OracleDataAdapter知道表列,但即使我以DBO身份登录,也不会告诉我是否有访问表的权限。谢谢大家。当我将oracle部分的代码更改为stmt=SELECT 1作为ACTION_ID时,“TEST”作为SYS.DUAL中的ACTION时,我在我的DataTable中得到了一个结果,这是表上的权限问题。我必须将SELECT ON DB.ACTIONS授予角色;OracleDataAdapter知道表列,但即使我以DBO身份登录,也不会告诉我是否有访问表的权限。谢谢大家。