在连接字符串中包含服务名称的语法是啥?
Posted
技术标签:
【中文标题】在连接字符串中包含服务名称的语法是啥?【英文标题】:What Is the Syntax for Including the Service Name in a Connection String?在连接字符串中包含服务名称的语法是什么? 【发布时间】:2021-02-13 01:59:44 【问题描述】:我有一个 C# ASP.Net MVC Web 应用程序。我正在尝试成功连接到 Oracle 数据库。 我收到“ORA-12514:TNS:监听器当前不知道连接描述符中请求的服务”错误。 我无权访问数据库所在的服务器。但我确实可以访问已安装在我的机器上的 Oracle SQL Developer。
在我的 C# 代码中,我正在设置这样的连接字符串:
ConnectionString = "DataSource=XXX.XX.XXX.XXX/abcd,1521;User ID=userid;Password=password;";
abcd 应该是服务名称。 1521是端口号。
我了解我的连接字符串可能不是错误的原因,但我想排除它。另外,我知道更正确的处理方式可能是在 web.config 中设置连接字符串并根据需要检索它,但我这样做只是为了便于测试,直到我知道我能够连接到数据库成功。
让我感到奇怪的是,我能够使用 Oracle SQL Developer 连接到数据库,并使用我在连接字符串中使用的相同 IP 地址、端口号、服务名称、用户名和密码。
首先,我想知道我的连接字符串是否有效。如果您对问题可能有其他想法,我们也将不胜感激。
在 Oracle SQL Developer 中使用此命令:
select sys_context('userenv','service_name') from dual;
我能够确定我在连接字符串中使用的服务名称是存在的,尽管我猜这并不能保证服务已启动。 无论如何,我都不是 DBA。事实上,总的来说,我对 .Net 和 Web 开发还是新手,但我已被指派解决这个问题。任何帮助表示赞赏。
【问题讨论】:
给你一个提示:在你的桌面上新建一个文本文件并重命名为a.udl
,双击它会看到一个熟悉的数据连接对话框,将提供者更改为oracle,设置所有设置,测试它,保存它,然后将它命名回a.txt
并在记事本中打开它;这是你的连接字符串
@CaiusJard 非常感谢您的提示。但是,我在提供程序列表中没有 Oracle。它默认选择打开 .udl 文件的应用程序是 OLE DB 核心服务。我应该使用什么应用程序来打开网址?我尝试从我的下载中选择 sqldeveloper.exe,但这只会启动 Oracle SQL Devleloper。
呃.. 可能是驱动程序问题 - OLE DB COre Services 是正确的应用程序。试试这个类似的技巧:向您的项目添加一个新的 DataSet,打开它,右键单击表面上的任意位置并添加一个表适配器。创建一个新的连接字符串,填写 Oracle 对话框,测试,保存.. 完成向导后,连接字符串将最终隐藏在您的应用程序设置中(只需触发 select * from dual
之类的查询。我会很感兴趣知道这是否在其他提示没有显示时显示您的 oracle 驱动程序
【参考方案1】:
我不记得看到以下格式
DataSource=XXX.XX.XXX.XXX/abcd,1521
作为有效(这并不意味着它不是,我只是没有看到它)。
我见过的比较常见的有:
DataSource=XXX
其中 XXX 是对您的 tnsnames.ora 文件的引用
DataSource=//nnn.nnn.nnn.nnn/service_name
DataSource=//nnn.nnn.nnn.nnn:port/service_name
所以不妨试试这些变体,看看效果如何。 https://www.c-sharpcorner.com/UploadFile/nipuntomar/connection-strings-for-oracle/
上还有更明确的替代方案列表【讨论】:
【参考方案2】:我最终想通了。我认为我的连接字符串格式不正确。我把它改成了:
ConnectionString = "DataSource=XXX.XX.XXX.XXX/abcd;User ID=userid;Password=password;";
基本上,我只是把端口号取下来了。就我而言,默认端口是我无论如何都需要的。如果我需要指定端口号,我不确定我会做什么。
【讨论】:
以上是关于在连接字符串中包含服务名称的语法是啥?的主要内容,如果未能解决你的问题,请参考以下文章
使用golang sql连接mysql时,如果我的用户名中包含@符号怎么办?