【问题标题】:Why do I get Oracle connection errors only in a VS 2008 web app/site project?为什么我只在 VS 2008 Web 应用程序/站点项目中出现 Oracle 连接错误?
【发布时间】:2009-07-22 22:20:07
【问题描述】:

在 Vista 64 位上使用 Visual Studio 2008,如果我创建一个如下所示的测试网站或 Web 应用程序...

public partial class _Default : System.Web.UI.Page 
{
    protected void Page_Load(object sender, EventArgs e)
    {
        OracleConnection connection;
        connection = new OracleConnection("User Id=user;Password=userpass;Data Source=dataSource;");
        connection.Open();
    }
}

...运行它,我得到以下错误。

ORA-12154: TNS:could not resolve the connect identifier specified

我知道这个关于parens的问题... http://duanesbrain.blogspot.com/2007/01/ora-12154-using-c-with-microsoft-visual.html

Visual Studio 2008 安装在 Program Files (x86) 中,但另一个开发人员具有相同的设置,并且对他来说工作正常。项目本身不在名称带括号的目录中。

我知道这不是我的 tnsnames.ora 或我的 sqlnet.ora 文件。我的机器设置方式与所有在这个项目上工作时间比我长得多的开发人员完全相同。

我也 100% 确定我使用的连接字符串是正确的。

如果我使用完全相同的代码创建控制台应用程序,它可以正常连接。我也可以使用该连接字符串信息 ping oracle 服务器并通过命令提示符直接连接。

另一个奇怪的事情是,如果我使用 VS 2005(也安装在 Program Files (x86) 中)创建具有相同代码的 Web 应用程序或网站,它也可以正常工作。

似乎仅限于使用 VS 2008 的 Web 应用程序和网站。

编辑: 我应该补充一点,我的 oracle 文件夹拥有当前授予所有人的所有权限。

编辑: Oracle 版本是 10.2.0

编辑:感谢您的见解,我永远无法让它和其他开发人员工作,我决定构建一个 XP 虚拟机来工作会更快。几个小时后,我完成了一个设置,一切运行良好。

【问题讨论】:

  • 对于 Visual Studio 2008,您是否使用了其他开发人员提供的解决方案文件? ORACLE_HOME 系统变量是否在执行过程中被覆盖?
  • 解决方案文件来自另一个开发者,从 svn 中提取。我不相信 ORACLE_HOME 系统变量在执行期间被覆盖。

标签: visual-studio-2008 oracleclient


【解决方案1】:

几个小时后我遇到了同样的问题!!!.. 发现Oracle安装的版本没有更新。 我安装了 10.2.0.4 和 Viola(在 10.2.0.1 上它不起作用!)一些 Oracle 错误。

【讨论】:

    【解决方案2】:

    在调试和发布模式下都会发生这种情况吗?您是使用 WebDev.WebServer.exe (casini) exe Web 服务器还是使用 IIS 运行网站。尝试切换到另一个。仅当您调试或运行它时才会发生这种情况吗?

    也许该网站正在以不同的用户/进程运行,并且该帐户没有为 orce 配置的路径?

    【讨论】:

      【解决方案3】:

      我以前在使用 oracle home 时遇到过问题。您能否检查并在需要时修改他的注册表以确保正确设置 ORACLE_HOME。注册表路径是 HKLM\SOFTWARE\ORACLE\

      我有一个名为 KEY_OraOdac11h_home1 的键,ORACLE_HOME 的值是我安装 Oracle 客户端的文件路径 (C:\Oracle\product\11.1.0\client_1)

      您也可以尝试添加值为 C:\Oracle\product\11.1.0\client_1 的系统环境变量 ORACLE_HOME。

      将文件路径更改为您安装oracle客户端的位置。

      【讨论】:

      • HKLM\SOFTWARE\ORACLE 在我的机器上似乎不存在。我似乎在任何地方都找不到 Oracle 注册表路径。就像我说的,尽管它适用于 vs 2005 中的命令行项目和 Web 应用程序。另外值得一提的是,我使用的是 10.2.0 版本。
      【解决方案4】:

      您看到的错误消息表明以下之一存在问题:您的 tnsnames.ora 文件、您的 sqlnet.ora 文件或您的数据源值。您应该检查其他开发人员的这些文件的版本。

      您是否尝试过使用 EZCONNECT 方法来验证连接性? (参见 www.connectionstrings.com/oracle)您可能需要修改 sqlnet.ora 文件以启用 EZCONNECT。

      Data Source=username/password@myserver//instancename
      

      【讨论】:

      • 是的,我已经尝试启用 ezconnect。如果您说的是真的,我认为我无法使用 VS 2005 Web 应用程序进行连接。该问题仅发生在 VS 2008 Web 应用程序中。我的 tnsnames.ora 和 sqlnet.ora 和其他可以连接 Oracle 的开发者一样。
      • 我还应该注意,如上所述,我还通过从命令行 ping 服务器验证了连接性。
      【解决方案5】:

      是 64bit/32bit 的问题吗?您可以尝试将项目设置为构建 32 位,然后强制 IIS 进入 32 位模式。

      如何更改 IIS:http://support.microsoft.com/kb/894435

      【讨论】:

        【解决方案6】:

        在尝试通过 .NET 连接到 Oracle 时,我遇到了不同的结果和奇怪的问题,通常这是一个奇怪的环境设置问题。

        试试这个连接字符串(不使用 tns 文件,但在其中使用相同的细节)

        数据源=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=HOST IP)(PORT=1521)))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=SERVICENAME)));用户id=用户ID;密码=密码;

        这将让您开始了解您连接到 Oracle 时是否存在问题,或者您的 TNS 文件是否无法正确解析。

        您应该在 SOFTWARE\ORACLE\ 中有一些内容,例如 HOME、ALL_HOMES、HOME0 等,因为这是驱动程序识别您的 oracle home 并注册 TNS 文件的方式。

        我还会在您运行 VS 的开发箱上查看您的防火墙,并检查您的 dll 引用以确保您使用的是相同的 Oracle Dll - 您使用的是 MS oracle dll 还是来自 Oracle 的那些?

        【讨论】:

          猜你喜欢
          • 2010-10-03
          • 1970-01-01
          • 1970-01-01
          • 2012-08-22
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多