从 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 数据库中获取错误的数据?