C# 连接到 Oracle 数据库错误 ORA-12545: 连接失败,因为目标主机或对象不存在
C# Connect to Oracle DataBase Error ORA-12545: Connect failed because target host or object does not exist
我想从 C# 连接到 Oracle 数据库,但我不能
因为这个错误 ORA-12545: Connect failed because target host or object does not exist
那我该怎么办?
C#代码
string strConn = "Data Source =(DESCRIPTION =" +
"(ADDRESS = (PROTOCOL = TCP)(HOST = DESKTOP-EIQ5MRF)(PORT = 1521))" +
"(CONNECT_DATA =" +
" (SERVER = DEDICATED)" +
"(SERVICE_NAME = XE)" +
")" +
");User Id =system;password=bluesky;";
OracleConnection conn = new OracleConnection(strConn);
conn.Open();
conn.Close();
listener.ora
SID_LIST_LISTENER = (SID_LIST =
(SID_DESC =
(SID_NAME = PLSExtProc)
(ORACLE_HOME = C:\oraclexe\app\oracle\product.2.0\server)
(PROGRAM = extproc)
)
(SID_DESC =
(SID_NAME = CLRExtProc)
(ORACLE_HOME = C:\oraclexe\app\oracle\product.2.0\server)
(PROGRAM = extproc)
) )
LISTENER = (DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1))
(ADDRESS = (PROTOCOL = TCP)(HOST = DESKTOP-EIQ5MRF)(PORT = 1521))
) )
DEFAULT_SERVICE_LISTENER = (XE)
tnsnames.ora
XE = (DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = DESKTOP-EIQ5MRF)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = XE)
) )
EXTPROC_CONNECTION_DATA = (DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1))
)
(CONNECT_DATA =
(SID = PLSExtProc)
(PRESENTATION = RO)
) )
ORACLR_CONNECTION_DATA = (DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1))
)
(CONNECT_DATA =
(SID = CLRExtProc)
(PRESENTATION = RO)
) )
错误
ORA-12454: connect failed because target host or object does not exist
这意味着你的连接字符串有问题,再次检查所有访问数据,机器名称并尝试使用此连接字符串,你忘记添加 "ADDRESS_LIST" ,检查 doc. 这里。
使用 ODP.NET
而不使用 tnsnames.ora
,应该像
var sampleConn= @"Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS= (PROTOCOL=TCP)(HOST=MyHost)(PORT=MyPort)))
(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=MyOracleSID)));
User Id=myUsername;Password=myPassword;"
所以你的连接字符串应该是这样的
string strCon =@"Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=DESKTOP-EIQ5MRF)(PORT=1521)))
(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=XE)));
User Id = system; Password = bluesky; ";
我想从 C# 连接到 Oracle 数据库,但我不能 因为这个错误 ORA-12545: Connect failed because target host or object does not exist 那我该怎么办?
C#代码
string strConn = "Data Source =(DESCRIPTION =" +
"(ADDRESS = (PROTOCOL = TCP)(HOST = DESKTOP-EIQ5MRF)(PORT = 1521))" +
"(CONNECT_DATA =" +
" (SERVER = DEDICATED)" +
"(SERVICE_NAME = XE)" +
")" +
");User Id =system;password=bluesky;";
OracleConnection conn = new OracleConnection(strConn);
conn.Open();
conn.Close();
listener.ora
SID_LIST_LISTENER = (SID_LIST = (SID_DESC = (SID_NAME = PLSExtProc) (ORACLE_HOME = C:\oraclexe\app\oracle\product.2.0\server) (PROGRAM = extproc) ) (SID_DESC = (SID_NAME = CLRExtProc) (ORACLE_HOME = C:\oraclexe\app\oracle\product.2.0\server) (PROGRAM = extproc) ) )
LISTENER = (DESCRIPTION_LIST = (DESCRIPTION = (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1)) (ADDRESS = (PROTOCOL = TCP)(HOST = DESKTOP-EIQ5MRF)(PORT = 1521)) ) )
DEFAULT_SERVICE_LISTENER = (XE)
tnsnames.ora
XE = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = DESKTOP-EIQ5MRF)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = XE) ) )
EXTPROC_CONNECTION_DATA = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1)) ) (CONNECT_DATA = (SID = PLSExtProc) (PRESENTATION = RO) ) )
ORACLR_CONNECTION_DATA = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1)) ) (CONNECT_DATA = (SID = CLRExtProc) (PRESENTATION = RO) ) )
错误
ORA-12454: connect failed because target host or object does not exist
这意味着你的连接字符串有问题,再次检查所有访问数据,机器名称并尝试使用此连接字符串,你忘记添加 "ADDRESS_LIST" ,检查 doc. 这里。
使用 ODP.NET
而不使用 tnsnames.ora
,应该像
var sampleConn= @"Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS= (PROTOCOL=TCP)(HOST=MyHost)(PORT=MyPort)))
(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=MyOracleSID)));
User Id=myUsername;Password=myPassword;"
所以你的连接字符串应该是这样的
string strCon =@"Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=DESKTOP-EIQ5MRF)(PORT=1521)))
(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=XE)));
User Id = system; Password = bluesky; ";