链接数据库在Oracle参数问题



我有这个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: end- file on communication channel

但如果我简单地改变查询不使用参数,那么它工作

有什么想法,我怎么能得到这个工作与参数?

编辑

在进一步的调查,如果我尝试以下

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连接丢失

我真的很想一个解决方案,允许参数传递到链接的db,但我似乎找不到任何关于使用参数与链接的db的

谢谢

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

ORA-28511更为具体。错误信息指向需要调查的特定区域;建议是"检查网络问题和远程主机崩溃。问题可能出在代理软件上。"

所以,这不是真正的语法问题。这是一个环境(配置/硬件)问题。恐怕你得再深入调查一下了。

好运。

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

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

就我个人而言,这整个Oracle驱动/查询的东西真的让我发疯了;例:我的经验是,某些SELECT *生成了DivideByZeroException,而用真正需要的列名替换*,效果非常好。

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

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

最新更新