当前位置: 首页 > 知识库问答 >
问题:

使用Oracle连接到Oracle。ManagedDataAccess

张光辉
2023-03-14

我在我的C#(. NET 4.0)项目中使用Oracle. ManagedDataAccess Nuget Package Version 12.1.022。该包自动在app.config文件中创建条目。如何从该文件中读取数据源字符串才能连接到数据库

系统。配置。配置管理器。应用设置。获取(“数据源”);

对我不起作用

<?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>

共有3个答案

鲜于凯歌
2023-03-14

您可以创建一个单独的类文件来返回connectionstring,如下所示-

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

然后,您可以在需要访问oracle db的地方这样调用它-

var oracleConnection = OracleDbConnection.GetConnection();
oracleConnection.Open();
盖斌
2023-03-14

您可以在连接字符串中引用已经定义的数据

<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();
    }
}
江正德
2023-03-14

通常,您会引用标准连接字符串中的别名:

  <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中引用别名。ora文件。默认情况下,驱动程序查找tnsnames。exe文件夹中的ora、TNS\U ADMIN环境变量或TNS\U ADMIN config变量中指定的目录:

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

 类似资料:
  • 我的后端系统正在通过数据源连接到远程Oracle DB: 现在我正试图通过sqldeveloper连接到此数据库,但我无法连接。以下是sqldeveloper配置: 连接名称:test 用户名:用户名 密码:密码 连接类型:基本 角色:默认 主机名:x. x. x. x 端口:1521 SID:- 服务名称:test

  • 我使用的是Oracle 11g R2数据库。我使用Oracle SQL Developer。如果我创建了一个新连接并检查了基本连接类型并填写了我可以连接的字段。如果我选择TNS并在下拉菜单中选择我想要的,它会显示失败E/S异常:网络适配器无法建立连接。 这是tnsnames.ora。我用它连接到2个数据库,dblilly和astrea。我可以正确连接到astrea。侦听器已打开,实例已准备就绪。你

  • 我们有一个。NET MVC 5应用程序和多个API,使用Oracle ManagedDataAccess驱动程序(版本4.122.1.0)连接到12c Oracle server(版本12.1.0.2.0)。我们即将升级到19c。此版本的Oracle ManagedDataAccess驱动程序是否连接到19c,或者我是否需要使用更新的驱动程序重新发布所有这些应用程序?

  • 我无法连接到我的。这是代码: 我得到了这个信息: 在学校,这个例子是有效的。问题出在哪里??

  • 高层目标是将NIFI连接到Oracle db服务--但只能使用Kerberos进行身份验证。 我们正在运行Apache NIFI1.9.2,并试图通过DBCPConnectionPool控制器服务连接到Oracle(使用驱动程序版本12.1)。我配置了一个KeytabCredentialService控制器服务,并在我的DBCP控制器服务中引用它。 我将Oracle驱动程序类名设置为“Oracle

  • 问题内容: 所以人们可能会告诉我这是一个坏主意,但我至少想让它尝试一下。 编辑 此应用程序的目的是仅当设备与oracle db位于同一网络中或通过VPN连接到网络时才可以工作。数据库中的信息将无法全局访问,这就是为什么我需要直接连接到oracle db的原因。 现在根据这个线程 他成功查询了oracle db。 因此,我有一个相当基本的类,在初始化时将尝试与我的数据库建立连接。 在我的主要活动on