2014-03-07 247 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)

相關問題