从 oracle 数据库中获取数据

Posted

技术标签:

【中文标题】从 oracle 数据库中获取数据【英文标题】:Fetching data from oracle DB 【发布时间】:2012-07-04 12:23:45 【问题描述】:

我使用以下代码连接到我的 oracle 数据库并执行查询。我在示例中使用的查询只是从表中获取一组行。但是,我不断收到“表或视图不存在”的错误消息。但是,我很确定该表存在于数据库中。我哪里错了?

 public void UpdateDatabase()
        
            System.Data.OracleClient.OracleConnection conn = new System.Data.OracleClient.OracleConnection();
            conn.ConnectionString = "Data Source=(DESCRIPTION =(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.5.144)(PORT = 1521))(CONNECT_DATA =(SERVER = DEDICATED)(SERVICE_NAME = orcl)));UID=mwm;PWD=mwm";
            conn.Open();
            OracleCommand command = conn.CreateCommand();
            command.CommandText = "Select * from Task"; 
            command.ExecuteNonQuery();
            command.Dispose();
        

达到 command.ExecuteNonQuery() 时触发错误。

【问题讨论】:

你的连接字符串正确吗?您是否连接到正确的数据库? @Habib.OSU ya ya 连接字符串是正确的。否则,我的朋友,我的连接字符串本身会出错……而且,我正在连接到正确的数据库 权限呢?用户 mwm 是否有权使用该表?或者Task 是 Oracle 中的保留字(不确定)。 您是否使用 SQL Navigator、PL/SQL Developer 或类似的查询工具连接到数据库(作为测试用户)并运行您的查询? @user1501034 检查我的更新答案。 【参考方案1】:

我认为问题出在command.ExecuteNonQuery();

实际上,您在这里执行查询,因此您应该使用DataAdapter 或DataReader。

public void UpdateDatabase()

   System.Data.OracleClient.OracleConnection conn = new    System.Data.OracleClient.OracleConnection();
  conn.ConnectionString = "Data Source=(DESCRIPTION =(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.5.144)(PORT = 1521))(CONNECT_DATA =(SERVER = DEDICATED)(SERVICE_NAME = orcl)));UID=mwm;PWD=mwm";
     conn.Open();
     OracleCommand command = conn.CreateCommand();            
     SqlDataAdapter a = new SqlDataAdapter("Select * from \"Task\"", command))            
     DataTable t = new DataTable();
     a.Fill(t);
     command.Dispose();

【讨论】:

投反对票,因为它不起作用。 SqlDataAdapter 与 Oracle 不兼容。它仅适用于 SQLSERVER。【参考方案2】:

任务是 oracle Reserve Word,这就是您收到此错误的原因。使用双引号。

command.CommandText = "Select * from \"Task\"";

ExectueNonQuery,可能不会给你任何错误,但它不会给你想要的结果。你需要做command.ExecuteReader。请参阅链接。

你也可以看到这个Getting Started with Oracle Data Provider for .NET (C# Version)

【讨论】:

你确定???我已将查询作为字符串传递..它不会将其作为字符串吗???还是仅将其作为保留词??? 根据 Asif 的回答,我注意到还有一件事,你为什么使用 ExecuteNonQuery,它用于插入、更新或删除语句而不是用于选择 @user1501034,它会把它当作一个字符串,所以你需要发送Select * from "Task" @Habib 如果我使用 ExecuteQuery,我会收到错误“'System.Data.OracleClient.OracleCommand' 不包含 'ExecuteQuery' 的定义并且没有扩展方法 'ExecuteQuery' 接受第一个参数可以找到类型“System.Data.OracleClient.OracleCommand”(您是否缺少 using 指令或程序集引用?)" @user1501034,我的错,对 SQL Server,它的 ExecuteReader 感到困惑,检查更新的答案和链接

以上是关于从 oracle 数据库中获取数据的主要内容,如果未能解决你的问题,请参考以下文章

为啥 JpaRepository.findAll() 方法从我的 Oracle 数据库中获取错误的数据?

Excel 2016 Power Query - 从 Oracle 数据字典中获取数据

Nifi 从 Oracle 问题中获取数据

如何从oracle数据库中随机获取记录?

oracle如何从存储过程中获取数据

oracle中从指定日期中获取月份或者部分数据