簡體   English   中英

無法從C#.net應用程序連接到oracle服務器

[英]cannot connect to oracle server from C#.net application

我正在嘗試連接到遠程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] [Microsoft] [ODBC驅動程序管理器]未找到數據源名稱且未指定默認驅動程序”(System.Data.Odbc.OdbcException)異常消息=“ERROR [IM002] [Microsoft] [ ODBC驅動程序管理器] 未找到數據源名稱且未指定默認驅動程序 “,Exception Type =”System.Data.Odbc.OdbcException“,Exception WinRT Data =”“

我根據我的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服務器

首先使用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();

您需要使用OracleConnection

OracleConnection conn = new OracleConnection(connectionString);

下載並安裝Oracle Data Provider for .NET

轉到Connections Strings for Oracle

也許會找到一些幫助

使用以下代碼:

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

來源

嘗試類似這樣的東西:

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

    }
}
}

我會嘗試Tnspi​​ng實用程序,以確保您可以通過tnsnames.ora連接

嘗試將tnsnames.ora和sqlnet.ora放在應用程序的同一文件夾中,看看是否解決了這個問題。

使用Managed ODP.Net,有一個不支持LDAP查找的問題(例如LDAP.ora)

我創建了一個app.config文件,並像這樣配置了DB條目

<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將該配置緩存到我的表單中(需要參考assembly - 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應用程序。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM