OracleDataAdapter未从Query中填充DataTable

时间:2012-04-02 20:40:05

标签: 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 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。我首先尝试使用DataSet并使用DataSet填充DataTable,但是当它在SQL Server中时,它在Oracle中不起作用。似乎有一些简单的缺失。

我没有收到任何错误,我只是从Oracle获得0结果集,即使我知道有数据可以被拉出来。

3 个答案:

答案 0 :(得分:3)

问题是我登录数据库的DBO帐户没有对表的权限。我跑了一个简单的补助金,效果很好。

    GRANT SELECT ON DB.ACTIONS TO USER;

答案 1 :(得分:1)

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

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

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

3)如果有东西返回但没有填充到数据集,请尝试使用oracle reader抛出输出并查看结果。

希望这会对你有所帮助。

答案 2 :(得分:0)

直接在DB上运行查询(例如使用sqlplus,TOAD,SQLDEveloper等)。它会返回什么吗? 如果不是:

a)在SQL Server中,文本比较(STATUS ='Pending')在Oracle中不区分大小写,区分大小写。也许您在状态栏中有数据,例如'PENDING'?

b)ACTION_DATE是日期数据类型吗?如果它是varchar则不起作用。

希望它有所帮助。