小编典典

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

sql

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

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

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

我对OracleTNS连接的了解不多。我使用此连接字符串是因为当我将其粘贴并测试连接时,它可以在向导中工作。您所看到的基本上是我粘贴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的代码或内容


阅读 401

收藏
2021-03-23

共1个答案

小编典典

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

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

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

  • 转到工具>库软件包管理器>软件包管理器控制台,
  • 确保在“默认项目”下拉列表中选择了正确的项目,
  • 进入
    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));
        }
    }
}
2021-03-23