Oracle数据库TNS数据库的值's长度键'数据源'超过了它的极限'128'

本文关键字:数据库 过了 极限 数据源 TNS Oracle | 更新日期: 2023-09-27 18:14:18

所以我有一个连接到Oracle数据库的字符串,基本上我直接从sql developer复制了它,然后去掉了空白。

我随后以编程方式添加用户名和密码。问题是,当我试图打开一个SQLConnection对象。我得到错误:

The value's length for key 'data source' exceeds it's limit of '128'

我真的不太了解oracle TNS连接。我使用这个连接字符串是因为当我粘贴它并进行测试连接时,它在向导中工作。你看到的基本上就是Visual studio在我粘贴TNS名称后生成的。

Data Source="(DESCRIPTION=(ADDRESS= (PROTOCOL=TCP)
(HOST=qprd-scan.website.com)(PORT=3726))(CONNECT_DATA=(SERVER=dedicated 
(SERVICE_NAME=DBprd_developer)))";

这个数据源键已经有160个字符了。

我在MSDN论坛上看到了这篇文章。

这家伙基本上是说从数据源中删除一些其他部分并将它们放在其他地方。我只是不知道该怎么做。

连接字符串上的MSDN并没有告诉我太多。

连接字符串和配置文件的MSDN也没有帮助。

无论如何,我很乐意展示更多我的代码或东西从app.config如果问

Oracle数据库TNS数据库的值's长度键'数据源'超过了它的极限'128'

您还没有向我们展示用于连接到数据库的完整代码,但是从注释到另一个答案似乎您正在使用OLE DB。我会避免使用它,特别是如果它似乎对数据源有128个字符的任意限制。

我还想指出,您还可以避免像另一个回答者建议的那样安装Oracle客户端。我对"即时"客户端没有太多的经验,但是完整的客户端需要大量的下载,并且不仅仅是为了能够将c#程序连接到Oracle。

相反,我们可以使用Oracle托管数据访问库。您可以使用NuGet安装它。要做到这一点:

  • 转到工具>库包管理器>包管理器控制台,
  • 确保在"默认项目"下拉列表中选择正确的项目,
  • 输入
    Install-Package odp.net.managed
    

这应该添加从NuGet下载库并添加Oracle。ManagedDataAccess到项目的引用

然后,如果为Oracle.ManagedDataAccess.Client添加一个using指令,下面的代码应该与Oracle数据库通信:

string connStr = "Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=<hostname>)(PORT=1521))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=<service_name>)));User Id=<user>;Password=<password>";
Console.WriteLine("Connection string has length " + connStr.Length);
using (var connection = new OracleConnection() { ConnectionString = connStr })
{
    connection.Open();
    OracleCommand command = new OracleCommand("SELECT * FROM DUAL", connection);
    using (OracleDataReader reader = command.ExecuteReader())
    {
        while (reader.Read())
        {
            Console.WriteLine(reader.GetString(0));
        }
    }
}

下面是我的app.config对于ODP的样子。我将EnterpriseLibrary5.0的数据层从System.Data.OracleClient转换为ODP。净的Oracle.DataAccess.Client。注意,publickey是我自己生成的唯一公钥,版本号也是我自己的版本号)。为什么我要定制它呢?因为System.Data.OracleClient不能处理CLOB,如果它超过32kb。

<configSections>
  <section name="dataConfiguration" type="Microsoft.Practices.EnterpriseLibrary.Data.Configuration.DatabaseSettings, Microsoft.Practices.EnterpriseLibrary.Data, Version=5.1.0.0, Culture=neutral, PublicKeyToken=4133a635bb2789db" requirePermission="true" />
</configSections>
<dataConfiguration defaultDatabase="DatabaseConnectionString" />
<connectionStrings>
    <add name="DatabaseConnectionString" connectionString="Data Source=TestDb;Persist Security Info=True;User ID=Usrname;Password=Pwd!;Max Pool Size=500;" providerName="Oracle.DataAccess.Client" />        
</connectionStrings>

我的TNS在tnsnames中。ora文件

TestDb=
  (DESCRIPTION=
    (ADDRESS=
      (PROTOCOL=TCP)
      (HOST=10.10.10.1)
      (PORT=1234)
    )
    (CONNECT_DATA=
      (SID=TestDb)
    )
  )

希望app.config和tnsnames。