【问题标题】:.NET connecting to oracle problems with the connectionstring.NET 使用连接字符串连接到 oracle 问题
【发布时间】:2010-04-22 10:28:57
【问题描述】:

目前我正在尝试连接到本地服务器。 比如说,通过 TOAD 连接可以正常工作。当我尝试使用 .NET 进行连接时,我得到了 ora-12154。 这让我很困惑,因为我使用的是 TNSNAMES.ora 文件中的连接字符串:

XE =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = myPC)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = XE)
    )
  )

如下:

private string connectionString = "Data Source=(DESCRIPTION ="
    +"    (ADDRESS_LIST=(ADDRESS = (PROTOCOL = TCP)(HOST = myPC)(PORT = 1521)))"
    +"    (CONNECT_DATA = (SERVER = DEDICATED)(SERVICE_NAME = XE));"
    +"User Id=sys;Password=zsxyzabc;";

有什么想法吗?

【问题讨论】:

    标签: .net oracle exception connection


    【解决方案1】:

    您正在以 SYS 身份连接。因此您需要包含 SYSDBA 权限:

    +"User Id=sys;Password=zsxyzabc;DBA Privilege=SYSDBA;";
    

    将 SYS 帐户用于常规应用程序工作,甚至常规 DBA 工作是不好的做法。但有时是必要的,当需要时我们必须连接as sysdba

    编辑

    这是一个微妙的问题:字符串末尾缺少一个括号!

    private string connectionString = "Data Source=(DESCRIPTION =" 
        +"    (ADDRESS_LIST=(ADDRESS = (PROTOCOL = TCP)(HOST = myPC)(PORT = 1521)))" 
        +"    (CONNECT_DATA = (SERVER = DEDICATED)(SERVICE_NAME = XE)));" 
                                                                      ^
    

    在这些情况下,拥有一个带括号匹配的 IDE(我使用 TextPad)是一个福音。

    【讨论】:

    • 我也尝试以“普通”用户身份登录,结果相同。
    • 天哪... VS 没有在字符串中显示丢失的括号,所以我完全忽略了它。谢谢你的敏锐;)
    【解决方案2】:

    这是一个解决连接字符串问题的好网站:

    www.connectionstrings.com

    【讨论】:

    • 连接字符串直接来自 tnsnames 文件
    【解决方案3】:

    您可能只能通过 Oracle 的 .NET 提供程序执行此操作。该提供程序确实支持您的连接字符串中的“DBA Privilege=SYSDBA”设置。

    你为什么用 SYS 用户登录?这很危险,您可以创建一个新用户并与之建立联系。您可能想授予您想要的任何特权。也试试这个:

    string connString = "User Id=sys; Password=zsxyzabc; Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=myPC)(PORT=1521))(CONNECT_DATA=(SERVER=dedicated)(SID=xe)))";
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-09-20
      • 2013-12-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多