.NET 连接到 oracle 时出现连接字符串问题

发布于 2024-08-30 00:56:48 字数 608 浏览 1 评论 0原文

目前我正在尝试连接到本地服务器。 例如,通过 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;";

有什么想法吗?

At the moment I'm trying to make a connection to a local server.
Connecting via, say, TOAD works fine. When I try to connect using .NET I get ora-12154.
Which puzzles me, since I'm using the connectionstring from my TNSNAMES.ora file:

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

As follows:

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;";

Any ideas?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

青春如此纠结 2024-09-06 00:56:48

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

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

使用 SYS 帐户进行常规应用程序工作,甚至常规 DBA 工作都是不好的做法。但有时这是必要的,当必要时我们必须以 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)是一个福音。

You are connecting as SYS. Therefor you need to include the SYSDBA privilege:

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

It is bad practice to use the SYS account for regular application work, or even regular DBA work. But it is necessary sometimes, and when it is necessary we have to connect as sysdba.

edit

It is a subtle one: you have a missing bracket at the end of the string!

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

Having an IDE with bracket matching (I use TextPad) is a boon in these cases.

岁月静好 2024-09-06 00:56:48

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

www.connectionstrings.com

This is a great site for sorting out your connection string issues:

www.connectionstrings.com

不乱于心 2024-09-06 00:56:48

您可能只能通过 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)))";

You may only be able to do this with the Oracle's .NET provider. That provider does support a "DBA Privilege=SYSDBA" setting in your connection string.

Why are you login with SYS user? It's dangerous, you may create a new user and connect with it. You may want to give any privileges you want. Try also this one :

string connString = "User Id=sys; Password=zsxyzabc; Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=myPC)(PORT=1521))(CONNECT_DATA=(SERVER=dedicated)(SID=xe)))";
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文