Как подключиться к базе данных Oracle Подключение из .Net Core

В библиотеке .netCore я хочу подключиться к базе данных Oracle. Есть ли способ сделать это еще?

Я пробовал предложения по другому сообщению SO, но он не работает, возможно, удален с тех пор? Как вы можете видеть в моем проекте .json, я пытаюсь использовать "net461".

В настоящее время я пытаюсь использовать Oracle.ManagedDataAccess.Client через старомодный ADO.Net. Я также знаю, что Oracle еще не выкупила разъем .netCore. Но даже там я не могу заставить его работать, он изо всех сил пытается включить System.Data​​strong > , это ошибки, когда я пытаюсь его добавить.

Мой 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, который я пытаюсь импортировать.

Я не укоренен в каком-либо конкретном способе этого делать, Я просто хочу наилучший разумный вариант на данный момент.

Ответ 1

Бета-версия .Net Core Управляемый драйвер, выпущенный Oracle в конце января 2018 года http://www.oracle.com/technetwork/topics/dotnet/downloads/net-downloads-160392.html. Поддерживается платфом упоминаний в doc, теперь 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();
            }           
        }
    }
}

Ответ 2

Oracle планирует сертифицировать ODP.NET, управляемый драйвер в Microsoft.NET Core, примерно в конце 2017 календарного года.
Oracle намеревается поддерживать управляемый ODP.NET в .NET Core в операционных системах Windows и Oracle Linux. Управляемый 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

Ответ 3

Как уже упоминалось в других ответах, Oracle еще не выпустила пакет для своего управляемого клиента, но планируется на конец этого года.

Однако, начиная с выпуска .NET Standard 2.0, была обновлена ​​библиотека System.Data.OracleClient(доступна через NuGet). Очевидно, что это не идеальное решение, поскольку эта библиотека устарела, но она дает вам кое-что для работы - и вы можете просто написать обертку и поменять ее на официальную библиотеку Oracle, когда она будет выпущена.

Ответ 4

На основе команда Oracle.NET Они выпустили новую бета-версию ODP.NET Core;

Вы также можете найти здесь

Ответ 6

Вы должны удалить "dnxcore50" (это означает, что ваш проект больше не является чистым ядром приложения .net) из project.json в рамках node и повторите попытку. Насколько я знаю, вы не можете подключиться к оракулу через ядро ​​.net ДЛЯ ТЕПЕРЬ, возможно, проверив эту ссылку полезно

Ответ 8

Мы это сделали, настроив сервер, связанный с oracle, и используя хранимые процедуры, которые вызывают вызовы связанного с Oracle сервера с SQL-сервера. Вы можете попробовать это. Вы можете использовать Openquery или Exec.. В [likedserver], чтобы выполнить запросы на стороне Oracle.

Ответ 9

Все работает в vs2017, но при публикации в контейнере Linux я получаю эту ошибку, используя System.Data.OracleClient: Невозможно загрузить DLL "oci": указанный модуль не может быть найден. (Исключение из HRESULT: 0x8007007E). Есть предложения? Нужно ли устанавливать клиент Oracle в контейнер Linux?