首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >VS2010 + Oracle驱动程序: ORA-12154: TSN:未能解析指定的连接标识符

VS2010 + Oracle驱动程序: ORA-12154: TSN:未能解析指定的连接标识符
EN

Stack Overflow用户
提问于 2010-11-19 19:40:21
回答 4查看 40.6K关注 0票数 3

我正在使用:

  • 2010
  • Oracle的.Net框架数据提供程序
  • 面向Visual的Oracle开发工具(来自Oracle的网站)

我尝试安装‘’,并在我的C:\app\ my username\product\11.2.0\client_1\Network\Admin目录中创建了tnsnames.ora和sqlnet.ora文件。

它们看起来是这样的:

代码语言:javascript
复制
# tnsnames.ora

ORATEST =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = dbs-oratest)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SID = [ORATEST])
    )
  )

代码语言:javascript
复制
# sqlnet.ora

SQLNET.AUTHENTICATION_SERVICES= (ALL)
NAMES.DIRECTORY_PATH= (TNSNAMES, EZCONNECT)

当我尝试使用Oracle数据提供程序来设置一个新连接(或任何其他驱动程序: OLE、ODBC等)时,会出现以下错误:

ORA-12154: TSN:未能解析指定的连接标识符

但是,在没有安装Oracle客户端的计算机上使用OLE驱动程序确实有效:

代码语言:javascript
复制
OleDbConnection conn = new OleDbConnection(
    "Provider=MSDAORA;Data Source=ORATEST;" + 
    "Persist Security Info=True;Password=readonly;User ID=readonlyuser");

我做错了什么?是否有关于如何安装基本Oracle驱动程序的在线简单说明?

提前谢谢你!

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-10-27 16:14:18

我发现的最佳解决方案是使用Oracle数据访问客户端库,并在连接字符串中包括整个TNS名称条目。这样就可以轻松地将项目发布到web服务器、ClickOnce等。

下面是设置在您的项目中工作的Oracle驱动程序所必需的步骤:

1)从‘OracleDataProviderfor.NET’包获取DLL

从此位置下载安装程序文件:http://www.oracle.com/technetwork/topics/dotnet/index-085163.html

我继续使用Oracle Developer Tools for Visual Studio安装了整整200 MB的ODAC,但是您实际上只需要从这个下载中获得四个DLL。(您可能可以直接从安装程序包中提取它们,而不是完成整个安装过程,或者其中一个较小的下载包含了所有这些程序。)

2)项目中的引用DLL

搜索Oracle数据访问客户端的安装目录,并将以下四个DLL拖到项目的根目录中:

  • Oracle.DataAccess.dll
  • oci.dll
  • oraciicus11.dll
  • OraOps11w.dll

副本设置为Output 属性,除Oracle.DataAccess.dll外,所有文件都设置为复制,始终是

Project --> Add Reference.下,单击Browse选项卡并选择Oracle.DataAccess.dll文件。

3)使用带有完全连接字符串的驱动程序(可选)

为了不必担心应用程序部署到的机器上正在设置TNS名称文件,我将整个定义放入文件中,如connectionstrings.com所示。它使连接字符串有点笨重,但删除了许多TNS名称文件(我以前遇到过):

代码语言:javascript
复制
Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=servername)(PORT=‌​1521)))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=servicename)));User Id=username;Password=********;

下面是我用来测试驱动程序的全部课程:

代码语言:javascript
复制
using System;
using System.Data;
using Oracle.DataAccess.Client;

static class Program
{
    [STAThread]
    static void Main()
    {
        TestOracle();
    }

    private static void TestOracle()
    {
        string connString = 
            "Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)" + 
            "(HOST=servername)(PORT=‌​1521)))" +
            "(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=servicename)));"+ 
            "User Id=username;Password=********;";
        using (OracleConnection conn = new OracleConnection(connString))
        {
            string sqlSelect = "SELECT * FROM TEST_TABLE";
            using (OracleDataAdapter da = new OracleDataAdapter(sqlSelect, conn))
            {
                var table = new DataTable();
                da.Fill(table);

                if (table.Rows.Count > 1) 
                    Console.WriteLine("Successfully read oracle.");
            }
        }
    }
}
票数 4
EN

Stack Overflow用户

发布于 2010-11-19 20:06:16

您应该使用OracleConnection客户端库,然后使用OracleConnection对象。

code/tech/windows/odpnet/howto/connect/index.html

我知道甲骨文对TNS的名字文件很挑剔。我通常都指望DBA能帮我。Server要容易得多.

票数 1
EN

Stack Overflow用户

发布于 2013-02-06 16:06:10

使用本地IIS web服务器而不是(Project WEB)为我做了这个技巧!

12154让我把头发拔出来.网站在VS2008上运行得很好。

致以敬意,

麦克

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4228739

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档