我有这个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驱动程序的生产系统,因为它们是我们项目中唯一在所有情况下工作的驱动程序。