我正在尝试动态连接到Oracle数据库并从表中提取一些信息。遗憾的是,我无法成功创建OracleConnection对象(使用Oracle.ManagedDataAccess.Client
)。我正在从窗口中检索用户输入,然后使用该信息进行连接。
我使用的连接字符串是 User Id={0}; Password={1};Data Source = (DESCRIPTION = (ADDRESS=(PROTOCOL=TCP)(HOST={2})(PORT={3}))(CONNECT_DATA=(SID={4})));
,其中所有占位符都由表单上的用户提供,并使用connection = string.Format(ConnStrings_WithDB[(int)DataSource.Oracle], Username, ConvertToUnsecuredString(Password), ServerName, Port, Database);
我现在使用的连接字符串是Data Source={0}/{1}@//{2}:{3}/{4}
,之前已尝试Data Source={0}/{1}@//{2}/{3}
。这个产生一个新的错误,如下面更新的截图所示。 CS_1: 0 = username, 1 = password, 2 = server, 3 = port, 4 = database(SID)...CS_2: same as 1, exception is that port is no longer included.
我读到ODP.NET没有引用TNS Names文件,如果它不在可执行文件目录中,所以我也尝试制作TNSNames.ora文件的副本并将其存储在可执行文件目录中,完成后,去掉它。这也行不通。
连接工作按以下方法完成
public bool CreateSqlConnection()
{
... erroneous ...
else
{
OraConnection = new OracleConnection(connection);
try
{
// This throws the exception
OraConnection.Open();
}
catch (OracleException ex)
{
Debug.WriteLine(ex.Message);
return false;
}
}
return true;
}
我不确定我哪里出错了,因为我对MSSQL做了同样的事情并发现它相当微不足道。任何帮助,提示,提示或指导都非常感谢!
极端信息和截图。
- 我有一个有效的TNS名称文件。我用它来整天连接数据库。
- tnsnames.ora文件位于:C:\oracle32\product\11.2.0\client_1\NETWORK\ADMIN\tnsnames.ora
- 截图中可以看到确切的例外情况。
- 创建测试的绝对最小值:
OracleConnection connection = new OracleConnection(<see connection string above>)
try { connection.Open(); } catch { }