Oracle数据库TNS关键“数据源”的值长度超过了'128'的限制

时间:2014-07-22 06:42:54

标签: c# sql oracle visual-studio-2012 tnsnames

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

我稍后以编程方式添加用户名和密码。问题是当我尝试打开SQLConnection对象时。我收到错误:

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

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

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

此数据源密钥已有160个字符。

我在看this post on the MSDN forums.

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

The MSDN on connection strings并没有真正告诉我什么。

The MSDN on Connection strings and configuration files也没有帮助。

无论如何,如果被问及

,我很乐意从app.config中显示更多我的代码或内容

2 个答案:

答案 0 :(得分:2)

这是我的app.config看起来像我通过自定义企业库访问的ODP.NET(我将EnterpriseLibrary5.0的数据层从System.Data.OracleClient转换为ODP.NET的Oracle.DataAccess.Client。注意publickey是我自己制作的一个,它是唯一的,版本也是我自己的版本号)。为什么我自定义它,因为System.Data.OracleClient超过32kb时无法处理CLOB。

<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.ora可以帮助您解决问题。

答案 1 :(得分:2)

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

我还要指出,您也可以避免安装Oracle客户端,这是另一个应答者的建议。我没有太多关于&#39;瞬间&#39;的经验。客户端,但完整的客户端是一个非常大的下载,只是为了能够将C#程序连接到Oracle。

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

  • 转到工具&gt;库包管理器&gt;包管理器控制台,
  • 确保在&#39;默认项目中选择了正确的项目&#39;下拉列表,
  • 输入

    Install-Package odp.net.managed
    

这应该添加从NuGet下载库并将Oracle.ManagedDataAccess添加到项目的References中。

然后,如果为using添加Oracle.ManagedDataAccess.Client指令,则以下代码应与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));
        }
    }
}