繁体   English   中英

如何从 .Net Core 连接到 Oracle 数据库连接

[英]How to connect to an Oracle database Connection from .Net Core

在 .netCore 库中,我想连接到 Oracle 数据库。 有什么办法可以做到吗?

我已经尝试了另一篇 SO post上的建议,但它不起作用,也许从那时起就被删除了? 正如您在我的 project.json 中看到的,我正在尝试使用“net461”。

我目前正在尝试通过老式 ADO.Net 使用 Oracle.ManagedDataAccess.Client。 我还知道 Oracle 还没有购买 .netCore 连接器。 但即使在那里我也无法让它工作,它很难包含System.Data ,每当我尝试添加它时都会出错。

我的 project.json 看起来像这样:

{
  "version": "1.0.0-*",

  "dependencies": {
    "NETStandard.Library": "1.6.0",
    "Oracle.ManagedDataAccess": "12.1.24160719",
  },

  "frameworks": {
    "netstandard1.6": {
      "imports": [
        "dnxcore50",
        "net461"
      ]
    }
  }
}

这就是我目前正在尝试这样做的方式。

using Oracle.ManagedDataAccess.Client;

public class MyRepository
{
    public string GetServerVersion()
    {
        var _db = new OracleConnection("User Id=myUser;Password=myPassword;Data Source=MyOracleConnection");

        var serverVersion = _db.ServerVersion;
        return serverVersion;
    }
}

然而,上面没有编译,因为它没有 System.Data,我正在努力导入。

我并没有根深蒂固地采取任何特定的方式,我只是想要此时此刻最好的合理选择

Oracle 于 2018 年 1 月底发布的 Beta 版 .Net Core Managed 驱动程序http://www.oracle.com/technetwork/topics/dotnet/downloads/net-downloads-160392.html 文档中支持的平台提及现在是 Win 和 Linux。

Nuget: https ://www.nuget.org/packages/Oracle.ManagedDataAccess.Core

其他具有标准/即时 Oracle 客户端的旧替代方案:

我的 TestCore.csproj 最后一个选择:

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>netcoreapp1.0</TargetFramework>
  </PropertyGroup>
  <ItemGroup>
    <PackageReference Include="Mono.Data.OracleClientCore" Version="1.0.0" />
  </ItemGroup>
</Project>

我的程序.cs:

using System;
using System.Data.OracleClient;

namespace TestCore
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Starting.\r\n");                      
            using (var _db = new OracleConnection("User Id=myUser;Password=myPassword;Data Source=MyOracleConnection"))
            {
                Console.WriteLine("Open connection...");
                _db.Open();
                Console.WriteLine(  "Connected to:" +_db.ServerVersion);
                Console.WriteLine("\r\nDone. Press key for exit");
                Console.ReadKey();
            }           
        }
    }
}

Oracle 在 nuget 上发布了用于 .NET Core官方数据提供程序

下面是一个展示如何使用它的基本示例:

using Oracle.ManagedDataAccess.Client;

public void Execute(string queryString, string connectionString)
{
    using (OracleConnection connection = new OracleConnection(connectionString))
    {
        OracleCommand command = new OracleCommand(queryString, connection);
        command.Connection.Open();
        command.ExecuteNonQuery();
    }
}

基本上你可以像官方的 .NET System.Data.SqlClient 一样使用它(很容易找到在线教程),只需将代码中的 SqlConnection 替换为 OracleConnection,将 SqlCommand 替换为 OracleCommand。

Oracle 计划在 2017 年年底左右对 ODP.NET(Microsoft .NET Core 上的托管驱动程序)进行认证。
Oracle 打算在 Windows 操作系统和 Oracle Linux 上的 .NET Core 上支持托管 ODP.NET。 托管 ODP.NET 可能支持其他操作系统。 Oracle 将继续评估对其他 Linux 发行版的支持,并将在未来宣布认证列表中的新增内容。 Oracle 不打算在 Microsoft .NET Core 2.0 之前的版本上进行认证。 .NET Core 2.0 包含许多功能,使该框架上的托管 ODP.NET 认证成为可能

来自这篇文章: http : //www.oracle.com/technetwork/topics/dotnet/tech-info/odpnet-dotnet-core-sod-3628981.pdf

更新:测试版发布ODP.NET Core

正如其他答案中提到的,Oracle 尚未为其托管客户端发布软件包,但计划在今年晚些时候发布。

但是,在 .NET Standard 2.0 发布时,System.Data.OracleClient 库已更新(可通过 NuGet 获得)。 显然,这不是一个理想的解决方案,因为该库已过时,但它确实为您提供了一些可以使用的东西 - 您只需编写一个包装器并在发布时将其替换为官方 Oracle 库即可。

您应该从 frameworks 节点下的 project.json 中删除“dnxcore50”(这意味着您的项目不再是纯 .net 核心应用程序),然后重试。 据我知道你无法通过.NET的核心连接到Oracle现在,也许检查这个环节可以有帮助

基于Oracle .NET 团队,他们发布了新的测试版 ODP.NET Core;

你也可以在这里找到

如果您使用带有 .NET 核心的 oracle 数据库,则需要安装一些 nuget 包。

  1. Microsoft.EntityFrameworkCore
  2. Oracle.EntityFrameworkCore
  3. Oracle.ManagedADataAccess.Core

之后需要在启动类的configureServices方法中写一些代码。

public void ConfigureServices(IServiceCollection services)
{
    services.AddDbContext<OracleDbContext>(options=>options.UseOracle(Configuration.GetConnectionString("OracleConnection")));            
}

OracleDbContext 类是从 DbContext 类继承而来的,并且 OracleConection 连接字符串是在 appSettings.json 文件中设置的。

OracleDbContext.cs

public class OracleDbContext : DbContext
{
   public OracleDbContext(DbContextOptions options):base(options){}
}

应用设置.json

{
"ConnectionStrings":{
   "OracleConnection":"Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS= 
 (PROTOCOL=TCP)(HOST={url of your database})(PORT={port})))(CONNECT_DATA= 
 {name of your database for ex: SID})));User Id={user id};password= 
 {password}:"
 }
}

需要替换方括号 {} 中的值。 当数据库位于服务器上而不是本地时,将使用此连接字符串。

终于 devart 的dotConnect for Oracle支持 .net 核心,因为版本“9.4.280”。

将 appsettings.json 添加到项目(输出目录:始终复制)。 填充连接字符串:

{
 "ConnectionStrings": {
   "connection-db": "Data Source=192.168.1.3:1521/ORACLEVM;User 
                     Id=userId;Password=123;Validate Connection=true;"
  }
}

在项目中打开 Manage Nuget Packages,添加这些包:

Microsoft.Extensions.Configuration.Json(在 .net core 中使用配置管理器)

Oracle.ManagedDataAccess.Core(.net核心版oracle数据访问客户端)

    static void Main(string[] args)
    {
        var builder = new ConfigurationBuilder()
           .SetBasePath(Directory.GetCurrentDirectory())
           .AddJsonFile("appsettings.json");

        var configuration = builder.Build();
        var connectionString = configuration.GetConnectionString("connection-db");
        using (OracleConnection connection = new OracleConnection(connectionString))
        {
            var command = new OracleCommand("INSERT INTO ..", connection);
            connection.Open();
            command.ExecuteNonQuery();
        }
    }

我们通过设置 Oracle 链接服务器并使用从 SQL 服务器调用 Oracle 链接服务器的存储过程来完成此操作。 你可以试试。 您可以使用 Openquery 或 Exec .. At [likedserver] 使查询在 Oracle 端执行。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM