ORA-02019使用Oracle.DataAccess.Client从C#进行String Concatenation SQL

时间:2017-03-03 19:09:26

标签: c# oracle odp.net

我有一些代码可以根据多个值生成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 /等等都已正确设置,因为我们有许多程序使用相同的信息来建立连接。我在使用链接时做错了吗?我搜索过谷歌并在这里发现了许多错误引用,但没有一点像这种情况。

1 个答案:

答案 0 :(得分:2)

因为你可以在SQLDeveloper中运行它,所以这听起来像db_link的可见性问题。该链接是公共数据库链接吗?如果是这样,所有用户都可以访问。如果没有,那么只有您登录SQLDeveloper的用户才能访问它。如果是这种情况,app用户是同一个用户吗?如果不是,那么它就无法访问它。关键是错误描述,找不到连接描述。确保您的应用可以看到此链接。