我是oracle的初学者,想用c#windows appliation连接oracle数据库
但为什么我尝试连接数据库我得到这个错误:
我的听众文件是这样的:
MYLISTNER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = DESKTOP-A5CFJSH)(PORT = 1521))
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
)
)
SID_LIST_MYLISTNER =
(SID_LIST =
(SID_DESC =
(SID_NAME = CLRExtProc)
(ORACLE_HOME = C:\app\BEHZAD-HUSH\product\11.2.0\dbhome_2)
(PROGRAM = extproc)
(ENVS = "EXTPROC_DLLS=ONLY:C:\app\BEHZAD-HUSH\product\11.2.0\dbhome_2\bin\oraclr11.dll")
)
)
ADR_BASE_MYLISTNER = C:\app\BEHZAD-HUSH
我的tnsnames文件是:
ORACLR_CONNECTION_DATA =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
)
(CONNECT_DATA =
(SID = CLRExtProc)
(PRESENTATION = RO)
)
)
会发生什么?我该如何解决?谢谢。
我的tns ping是:
TNS Ping Utility for 64-bit Windows: Version 11.2.0.1.0 - Production on 02-NOV-2015 15:42:22
Copyright (c) 1997, 2010, Oracle. All rights reserved.
Used parameter files:
C:\app\BEHZAD-HUSH\product\11.2.0\dbhome_2\network\admin\sqlnet.ora
Used TNSNAMES adapter to resolve the alias
Attempting to contact (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))) (CONNECT_DATA = (SID = CLRExtProc) (PRESENTATION = RO)))
TNS-12541: TNS:no listener
答案 0 :(得分:0)
服务器名称应来自TNS(ORACLR_CONNECTION_DATA),而不是localhost。
修改强>
TNS-12541:TNS:没有听众
检查tns侦听器是否正在运行。
CMD> lsnrctl
LSNRCTL> start
在开始开发应用程序之前,必须先通过tnsping / sqlplus检查数据库连接。只有在您成功连接后,您才能继续前进。
如果侦听器是非常有效的,你就不能尝试通过tcp / ip连接,而不是通过IPC连接(在tnsnames.ora中更改tns连接字符串之后) -
ORACLR_CONNECTION_DATA =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP) (HOST = DESKTOP-A5CFJSH) (PORT = 1521))
(CONNECT_DATA = (SID = CLRExtProc))
)
答案 1 :(得分:0)
幸运的是,Oracle提出了ezConnect,它大大简化了连接字符串。它本质上是:
server/port:service name (or SID)
通过显式指定通常封装在TNSNAME中的元素,可以消除目标机器对该TNS名称具有不同定义的任何可能性,或者更糟糕的是,根本没有定义。
或者,如果您使用Direct=true
,您仍然可以绕过TNSnames并明确说明服务器,端口和服务名称:
String conString = String.Format("Direct=true;Server={0};" +
"Port={1};Service Name={2};User Id={3};Password={4};",
"myhost.foo.bar", 1521, "oraprod", "scott", "tiger");
或使用SID(我永远不会记得哪些有用,所以我都尝试了):
String conString = String.Format("Direct=true;Server={0};" +
"Port={1};SID={2};User Id={3};Password={4};",
"myhost.foo.bar", 1521, "oraprod", "scott", "tiger");
然后:
OracleConnection conn = new OracleConnection(constring);
conn.Open();
(当然有适当的错误捕获)。
这比您要求的信息更多,但最重要的是,当您建立连接时,我会将其用作"服务器名称"在对话框中:
DESKTOP-A5CFJSH:1521/CLRExtProc