我有一些代码可以根据多个值生成SQL查询。最终结果需要调用两个数据库来创建单个DataTable
。第二个数据库通过我们一直使用的数据库链接连接。 C#本身是可靠的,最终结果查询字符串是这样的:
SELECT distinct HOME.MISC.PROCEDURE(H.WIDGET, H.FIDGET),
H.WIDGET ,
(SELECT WIDGETYPE
FROM VISITOR.SOMETABLE@DEVSERV --here is where it all goes bad, bad bad.
WHERE UPPER(WIDGET_SN) = UPPER(H.WIDGET)
) ,
H.FIDGET,
HOME.STUFF.ANOTHERPROCEDURE(H.WIDGET)
FROM HOME.WIDGET_HEAP H
INNER JOIN HOME.WIDGET_LIST L
ON H.WIDGET = L.WIDGET_ID
WHERE UPPER(L.WIDGET_ID ) = UPPER('1337-H4X')
显然这些不是真正的字段名称或值,但你明白了。当我在断点处从变量本身提取查询时,我可以将SQL粘贴到SQL Developer中,它可以正常工作。当我运行查询并尝试在我的程序中填充DataTable
时,我得到:
ORA-02019:找不到远程数据库的连接描述;
用户名/ TNS /等等都已正确设置,因为我们有许多程序使用相同的信息来建立连接。我在使用链接时做错了吗?我搜索过谷歌并在这里发现了许多错误引用,但没有一点像这种情况。
答案 0 :(得分:2)
因为你可以在SQLDeveloper中运行它,所以这听起来像db_link的可见性问题。该链接是公共数据库链接吗?如果是这样,所有用户都可以访问。如果没有,那么只有您登录SQLDeveloper的用户才能访问它。如果是这种情况,app用户是同一个用户吗?如果不是,那么它就无法访问它。关键是错误描述,找不到连接描述。确保您的应用可以看到此链接。