ORA-02019 关于使用 Oracle.DataAccess.Client 来自 C# 的字符串连接 SQL

ORA-02019 on String Concatenation SQL from C# using Oracle.DataAccess.Client

我有一些代码可以根据多个值生成 SQL 查询。最终结果需要调用两个数据库来创建一个 DataTable。第二个数据库由我们一直使用的数据库 link 连接。 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: connection description for remote database not found;

username/TNS/etc 等都已正确设置,因为我们有许多程序使用相同的信息来建立连接。我在使用 link 时做错了什么吗?我搜索了 Google 和此处,发现了很多关于该错误的参考资料,但没有像这种情况。

既然你可以在 SQLDeveloper 中 运行 它就好了,这听起来像是 db_link 可见性的问题。 link 是 public 数据库 link 吗?如果是这样,所有用户都可以访问。如果没有,那么只有您登录到 SQLDeveloper 的用户才能访问它。如果是这种情况,应用程序用户是否是同一用户?如果不是,则它无权访问它。关键在错误描述,connection description not found。确保您的应用可以看到此 link.