c# - 使用 Oracle.ManagedDataAccess 连接到 Oracle

标签 c# .net oracle odp.net

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

System.Configuration.ConfigurationManager.AppSettings.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.ora 文件中引用别名。默认情况下,驱动程序在 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

关于c# - 使用 Oracle.ManagedDataAccess 连接到 Oracle,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31564288/

相关文章:

c# - 使用 C# 或 C++ 在 Windows 10 上的 Bash 上运行 GCC

c# - Amazon S3 - 如何正确构建指向存储桶中对象的 URL?

.net - Visual Studio 调试引用的 DLL

c# - 有没有办法检测附加的调试器是否是远程调试器?

sql - 如果存在匹配项,则仅选择包含 COLUMN=<value> 的行,否则选择 COLUMN IS NULL

c# - 在检查取消时让后台工作人员进入休眠状态

c# - 如何修复: Unable to connect to any of the specified MySQL ports

c# - C++内存管理和.NET内存管理有什么区别?

oracle - 用 Oracle Rest Data Services 替换 mod_plsql

java - 如何向 Oracle 触发器发送任意参数?