4

我正在尝试连接到远程 Oracle 服务器。我的连接字符串 -

OdbcConnection con = new OdbcConnection();
con.ConnectionString = @"Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST= xxxx)(PORT=xxxxx))(CONNECT_DATA=(SERVER=dedicated)(SERVICE_NAME=abc.domain.com)));USER ID=user1;Password=pwd;";

我遇到错误提示 - “错误 [IM002] [Microsoft][ODBC 驱动程序管理器] 未找到数据源名称并且未指定默认驱动程序”(System.Data.Odbc.OdbcException)异常消息 = “错误 [IM002] [Microsoft][ ODBC 驱动程序管理器]未找到数据源名称且未指定默认驱动程序“,异常类型 = “System.Data.Odbc.OdbcException”,异常 WinRT 数据 = “”

我根据我的 TNSNAMES.ora 指定了我的连接字符串

我的数据库在 TNSNAMES.ora 中的条目如下所示:

DB.WORLD=
  (DESCRIPTION=
    (ADDRESS=
      (PROTOCOL=TCP)
      (HOST= xxxx)
      (PORT=xxxxx)
    )
    (CONNECT_DATA=
      (SERVER=dedicated)
      (SERVICE_NAME=abc.domain.com)
    )
  )

有人可以解释错误。如果我的连接字符串出错以及如何从我的 Windows 应用程序连接到 Oracle 服务器,请提供帮助/建议

4

7 回答 7

5

首先使用nuget 数据包管理器安装 odp.net.managed :

 Install-Package odp.net.managed

odp.net.managed 无需预装 Oracle 客户端即可工作

下一个:

const string connectionString = @"Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST= xxxx)(PORT=xxxxx))(CONNECT_DATA=(SERVER=dedicated)(SERVICE_NAME=abc.domain.com)));USER  ID=user1;Password=pwd;";
var connection = new OracleConnection(connectionString);
connection.Open();

如果您在应用程序文件夹中有 tnsnames.ora:

const string connectionString = @"Data Source=DB.WORLD;USER  ID=user1;Password=pwd;";
var connection = new OracleConnection(connectionString);
connection.Open();

或者如果 tnsnames.ora 在其他文件夹中:

Environment.SetEnvironmentVariable("TNS_ADMIN", @"path_to_tnsadmin.ora");
const string connectionString = @"Data Source=DB.WORLD;USER  ID=user1;Password=pwd;";
var connection = new OracleConnection(connectionString);
connection.Open();
于 2014-03-15T12:12:13.020 回答
2

你需要使用OracleConnection

OracleConnection conn = new OracleConnection(connectionString);

下载并安装适用于 .NET 的 Oracle 数据提供程序

于 2014-03-07T10:49:49.660 回答
0

转到Oracle 的连接字符串

也许会找到一些帮助

于 2014-03-12T06:40:23.480 回答
0

使用以下代码:

using System;
using Oracle.DataAccess.Client; 

class ConnectionSample
{
  static void Main()
  {
    OracleConnection con = new OracleConnection();

    //using connection string attributes to connect to Oracle Database
    con.ConnectionString = "User Id=scott;Password=tiger;Data Source=oracle";
    con.Open();
    Console.WriteLine("Connected to Oracle" + con.ServerVersion);

    // Close and Dispose OracleConnection object
    con.Close();
    con.Dispose();
    Console.WriteLine("Disconnected");
  }
}

来源

于 2014-03-12T15:47:44.347 回答
0

尝试类似这样的课程:

public class OracleOperations
{
OracleConnection oraConn = new OracleConnection();

private bool connStatus;

public OracleOperations()
{
    connStatus = false;
    connect();
}

~OracleOperations()
{
    disconnect();
}

public bool getConnStatus()
{
    return connStatus;
}

public void connect()
{
    string connString = "User Id=xxxx; Password=yyyyy; Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=10.10.10.10)(PORT=1583))(CONNECT_DATA=(SERVER=dedicated)(SID=oracledb)))";
    if (oraConn.State != ConnectionState.Open)
    {
        try
        {
            oraConn.ConnectionString = connString;
            oraConn.Open();
            Console.WriteLine("Successful Connection");
            connStatus = true;
        }
        catch (Exception eOra)
        {
            Console.WriteLine(eOra.Message+ "Exception Caught");
            connStatus = false;
            throw eOra;
        }
    } 
}
public void disconnect()
{
    if (oraConn.State == ConnectionState.Open)
    {
        try
        {
            oraConn.Close();
            connStatus = false;
            Console.WriteLine("Connection Closed");
        }
        catch (Exception ex)
        {
            Console.WriteLine(ex.Message + "Exception Caught");
        }

    }
}
}
于 2014-03-14T08:00:02.883 回答
0

我会尝试使用 Tnspi​​ng 实用程序来确保您可以通过 tnsnames.ora 进行连接

尝试将 tnsnames.ora 和 sqlnet.ora 放在应用程序的同一文件夹中,看看是否能解决问题。

使用 Managed ODP.Net 有一个问题,它不支持 LDAP 查找(例如 LDAP.ora)

于 2014-03-18T22:24:17.313 回答
-1

我已经创建了一个 app.config 文件并像这样配置了数据库条目

<configuration>
  <configSections>
    <section name ="Environment" type="System.Configuration.NameValueSectionHandler" />
  </configSections>

  <Environment>
    <add key ="CIT" value ="Password=pwd123;User ID=abc123;Data Source=db1;Persist Security Info=True;Provider=MSDAORA"/>
    <add key ="SIT" value ="Password=pwd234;User ID=abc234;Data Source=db2;Persist Security Info=True;Provider=MSDAORA"/>
    <add key ="UAT" value ="Password=pwd345;User ID=abc345;Data Source=db3;Persist Security Info=True;Provider=MSDAORA"/>

  </Environment>
</configuration>

使用ConfigurationManager将该配置引用到我的表单中(需要引用程序集 - system.configuration)。添加命名空间 -使用 System.Collections.Specialized以利用NameValueCollection。代码是这样的

environments = ConfigurationManager.GetSection("Environment") as NameValueCollection; 
string strConnString = environments[envs]; 
conn = new OleDbConnection(strConnString); 
conn.Open(); 
OleDbDataAdapter objDa = new OleDbDataAdapter("select * from tblABC", conn); 
DataSet ds1 = new DataSet(); 
objDa.Fill(ds1); dataGridView1.DataSource = ds1.Tables[0];

使用数据集,我使用 OleDbDataAdapter 填充了数据网格。它适用于我的 Windows 应用程序。

于 2014-09-15T07:20:45.077 回答