2014-03-07 189 views
3

我试图连接到远程Oracle服务器。我的连接字符串 -无法从C#.net应用程序连接到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;"; 

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

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

我的数据库在TNS NAMES.ora是这样的:

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

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

+0

你想要连接哪个版本的oracle? – Jasti

+0

即时通讯使用oracle 11g – Shalem

+0

您正在使用ODBC连接,但您传递的是Oracle字符串。创建ODBC源或使用OracleConnection –

回答

-1

我创建了一个应用程序。配置文件,可以这样来配置

<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添加命名空间 - 。专用于获取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]; 

使用datset,我已经使用OleDbDataAdapter填充datagrid。它适用于我的Windows应用程序。

2

你需要使用OracleConnection

OracleConnection conn = new OracleConnection(connectionString); 

下载并安装Oracle Data Provider for .NET

+0

我有2个查询 1.下载说12c oracle数据提供者。最终用户是否需要在他/她的系统中运行相同版本的提供者(最终用户安装了Oracle 11g版本)? 2.你能给我连接字符串完整的语法吗?我新来这个oracle连接。 如果有可能使用Oracle 11g本身,而没有额外的安装,那将是非常好的。感谢您的建议和帮助。 – Shalem

+0

@Shalem - 您需要使用ODP.NET,这是推荐的Oracle访问方法,是的,您必须*将它安装在客户端计算机上。如果不安装Oracle软件包,您无法从授权机器连接到Oracle服务器。 –

+0

我不确定在客户端机器上获得ODP.Net。请建议一个替代方案。 – Shalem

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"); 
    } 
} 

来源ONETWOTHREE

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"); 
     } 

    } 
} 
} 
+1

感谢您对连接字符串的帮助!我需要一种方法,不必将Tnsnames.ora文件包含在我的部署中,并且可以工作。 – Trebor

4

先安装odp.net.managed使用nuget packet manager

Install-Package odp.net.managed 

ODP。网络管理工作牛逼预装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(); 
0

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

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

与托管ODP.Net有一个需要注意它不支持LDAP查询(例如LDAP.ora)

相关问题