4

所以我有一个到 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 个字符。

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

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

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

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

无论如何,如果被问到,我很乐意展示更多来自 app.config 的代码或内容

4

2 回答 2

2

这是我通过自定义企业库访问的 ODP.NET 的 app.config 的样子(我将 EnterpriseLibrary5.0 的数据层从 System.Data.OracleClient 转换为 ODP.NET 的 Oracle.DataAccess.Client。请注意,公钥是我的自己生产的唯一的,版本又是我自己的版本号)。我为什么要自定义它,那是因为 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>

还有我在 tnsnames.ora 文件中的 TNS

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

希望 app.config 和 tnsnames.ora 能帮助你解决这个问题。

于 2014-07-22T07:15:22.557 回答
2

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

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

相反,我们可以使用 Oracle Managed Data Access 库。您可以使用 NuGet 安装它。去做这个:

  • 转到工具 > 库包管理器 > 包管理器控制台,
  • 确保在“默认项目”下拉列表中选择了正确的项目,
  • 进入

    Install-Package odp.net.managed
    

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

然后,如果您添加一个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));
        }
    }
}
于 2014-07-22T08:19:23.117 回答