programing

Oracle을 사용하여 Oracle에 연결합니다.관리되는 데이터 액세스

minimums 2023. 7. 17. 20:49
반응형

Oracle을 사용하여 Oracle에 연결합니다.관리되는 데이터 액세스

Oracle을 사용하고 있습니다.C#(.NET 4.0) 프로젝트의 ManagedDataAccess Nuget Package 버전 12.1.022.패키지는 자동으로 app.config 파일에 항목을 만듭니다.데이터베이스에 연결하려면 이 파일에서 데이터 원본 문자열을 어떻게 읽습니까?

시스템.구성.구성 관리자.앱 설정.Get("dataSource");

내게 도움이 되지 않습니다.

<?xml version="1.0" encoding="utf-8"?>

<configuration>
  <configSections>
    <section name="oracle.manageddataaccess.client"
             type="OracleInternal.Common.ODPMSectionHandler, Oracle.ManagedDataAccess, Version=4.121.2.0, Culture=neutral, PublicKeyToken=89b483f429c47342" />
  </configSections>
  <system.data>
    <DbProviderFactories>
      <remove invariant="Oracle.ManagedDataAccess.Client" />
      <add name="ODP.NET, Managed Driver" invariant="Oracle.ManagedDataAccess.Client"
           description="Oracle Data Provider for .NET, Managed Driver"
           type="Oracle.ManagedDataAccess.Client.OracleClientFactory, Oracle.ManagedDataAccess, Version=4.121.2.0, Culture=neutral, PublicKeyToken=89b483f429c47342" />
    </DbProviderFactories>
  </system.data>
  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <publisherPolicy apply="no" />
        <assemblyIdentity name="Oracle.ManagedDataAccess" publicKeyToken="89b483f429c47342" culture="neutral" />
        <bindingRedirect oldVersion="4.121.0.0 - 4.65535.65535.65535" newVersion="4.121.2.0" />
      </dependentAssembly>
    </assemblyBinding>
  </runtime>

  <oracle.manageddataaccess.client>
    <version number="*">
      <dataSources>
        <dataSource alias="MyDataSource"
                    descriptor="(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=100.100.100.100)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=myservice.com)))" />
      </dataSources>
    </version>
  </oracle.manageddataaccess.client>
</configuration>

일반적으로 표준 연결 문자열의 별칭을 참조합니다.

  <connectionStrings>
    <add name="MyConnection" connectionString="Data Source=MyDataSource;User Id=scott;Password=tiger;"/>
  </connectionStrings>

그런 다음 표준 방법을 사용하여 문자열을 검색합니다.

ConfigurationManager.ConnectionStrings["MyConnection"].ConnectionString;

또한 데이터 원본 섹션의 별칭은 선택 사항입니다.연결 문자열에 직접 설명자를 포함할 수 있습니다.

  <connectionStrings>
    <add name="MyConnection" connectionString="Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=100.100.100.100)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=myservice.com)));User Id=scott;Password=tiger;"/>
  </connectionStrings>

tnsnames.or 파일의 별칭을 참조할 수도 있습니다.기본적으로 드라이버는 exe 폴더, TNS_ADMIN 환경 변수에 지정된 디렉토리 또는 TNS_ADMIN 구성 변수에서 tnsnames.ora를 찾습니다.

http://docs.oracle.com/cd/E48297_01/doc/win.121/e41125/featConfig.htm#autoId6 http://docs.oracle.com/cd/E48297_01/doc/win.121/e41125/featConfig.htm#autoId7

연결 문자열에서 이미 정의된 데이터 소스를 참조할 수 있습니다.

<oracle.manageddataaccess.client>
    <version number="*">
        <dataSources>
            <dataSource alias="MyDataSource" descriptor="(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=100.100.100.100)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=myservice.com)))" />
        </dataSources>
    </version>
</oracle.manageddataaccess.client>

예를 들어, 이 특정한 경우:

public class OracleDBManager
{
    private OracleConnection _con;
    private const string connectionString = "User Id={0};Password={1};Data Source=MyDataSource;";
    private const string OracleDBUser = "exampleUser";
    private const string OracleDBPassword = "examplePassword";

    public OracleDBManager()
    {
        InitializeDBConnection();
    }

    ~OracleDBManager()
    {
        if (_con != null)
        {
            _con.Close();
            _con.Dispose();
            _con = null;
        }
    }

    private void InitializeDBConnection()
    {
            _con = new OracleConnection();
            _con.ConnectionString = string.Format(connectionString, OracleDBUser, OracleDBPassword);
            _con.Open();
    }
}

연결 문자열을 반환하는 별도의 클래스 파일을 만들 수 있습니다.

public class OracleDbConnection
{
 public static OracleConnection GetConnection()
 {
  const string connectionString = "Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=127.0.0.1)(PORT=1521)) (CONNECT_DATA=(SERVICE_NAME=PROD))); User Id=userId;Password=password;";
  var connection=new OracleConnection(connectionString);
  return connection;
 }
}

그러면 오라클 db에 액세스해야 하는 곳에서 이렇게 부를 수 있습니다.

var oracleConnection = OracleDbConnection.GetConnection();
oracleConnection.Open();

Formo 패키지를 사용하여 다음 방법을 만들었습니다.MyDataSource에서 낚아채다.app.config파일

using Configuration = Formo.Configuration;
.......
/// <summary>
/// Gets the data source from app.config file
/// </summary>
/// <returns></returns>
public string GetMyDataSource()
{
    dynamic config = new Configuration();
    return config.MyDataSource;
}

언급URL : https://stackoverflow.com/questions/31564288/connecting-to-oracle-using-oracle-manageddataaccess

반응형