【问题标题】:Link DB in Oracle parameter problemOracle 中的 Link DB 参数问题
【发布时间】:2011-10-27 04:02:26
【问题描述】:

我有这个链接到另一个数据库的 Oracle 查询,但它似乎不接受我传递给查询的参数

这是我的代码

cmd.CommandText = "SELECT * FROM table1@dev tb1 join table2 tb2 on tb1.id = tb2.id WHERE tb1.id = :id"

cmd.CommandType = CommandType.Text

cmd.BindByName = True

cmd.Parameters.Add(New OracleParameter("id", id))

执行此操作时出现此错误

ORA-03113:通信通道上的文件结束

但是,如果我只是将查询更改为不使用参数,那么它就可以工作

关于如何使用参数实现此功能的任何想法?

编辑

如果我尝试以下方法,将进一步调查

cmd.CommandText = "SELECT * FROM table1@dev tb1 WHERE tb1.id = :id"

cmd.CommandType = CommandType.Text

cmd.BindByName = True

cmd.Parameters.Add(New OracleParameter("id", id))

我得到一个不同的错误

ORA-28511:与异构远程代理的 RPC 连接丢失

我真的很想要一个允许将参数传递给链接数据库的解决方案,但我似乎找不到任何关于将参数与链接数据库一起使用的信息

谢谢

【问题讨论】:

  • 您好,这看起来不像是查询参数问题,而是 DBLink 配置问题,看起来您正在使用 DBLink 到 Oracle 以外的数据库,是这样吗?请添加您的 tnsnames.ora 和 DBLink 创建脚本。另一方面,如果没有 where 条件,查询是否有效?

标签: asp.net sql sql-server oracle parameters


【解决方案1】:

就个人而言,整个 Oracle 驱动程序/查询的东西真的让我发疯了;例如我体验到某些SELECT * generated a DivideByZeroException,同时用真正需要的列名替换* 就像一个魅力。

可能您在这里遇到了类似的问题。

帮助我解决问题的是真正明智地选择 ODP.NET 驱动程序;我们在这里运行一个带有 beta 驱动程序的生产系统,因为它们是我们项目中唯一在所有情况下都能工作的驱动程序。

【讨论】:

  • 感谢您的建议,但不幸的是它似乎没有任何区别
【解决方案2】:

您是否尝试过指定参数类型?:

OracleParameter p1 = new OracleParameter("id",OracleDbType.Decimal); 
p1.Value=id; 
cmd.Parameters.Add(p1); 

【讨论】:

  • 抱歉延迟回复您 - 这似乎没有什么不同 - 还有其他想法吗?
  • 或者如何添加Direction = ParameterDirection.Input
  • 再次感谢您的建议,但似乎仍然没有任何效果...我找不到为链接数据库添加参数的任何文档
  • 也许它不喜欢 @ 我想知道在 table1@dev 上创建一个视图并从中选择有什么不同吗?
  • 我按照你的建议创建了一个视图,但它似乎给出了同样的错误 - 到目前为止我感谢你的帮助 :)
【解决方案3】:

ORA-03113 是一个通用异常,当发生灾难性事件导致连接断开时抛出。警报日志或跟踪文件中可能有一些附加信息。检查后台转储或诊断目录。

ORA-28511 更具体。错误消息指向特定区域进行调查;建议是“检查网络问题和远程主机崩溃。问题可能出在代理软件中。”

所以,这并不是真正的语法问题。这是一个环境(配置/硬件)问题。恐怕您将不得不进行更多的挖掘工作。

祝你好运。

【讨论】:

  • 谢谢 - 原来是我们的 EasySoft 驱动程序有问题 - 他们现在正在调查 :)
猜你喜欢
  • 2019-01-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-25
  • 2013-04-30
  • 2011-10-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多