2017-01-04 9 views
8

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

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

В настоящее время я пытаюсь использовать Oracle.ManagedDataAccess.Client через старомодный ADO.Net. Я также знаю, что 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, которое я пытаюсь импортировать.

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

ответ

1

Вы должны удалить «dnxcore50» (это означает, что ваш проект больше не является чистым ядром .net) из project.json в узле frameworks и повторите попытку. Насколько я знаю, вы не можете подключиться к оракулу с помощью ядра .net ПОКА, может проверить this link баллончик полезно

+0

теперь удалил, но, как вы предлагаете, он все еще оставляет мне не удалось подключиться для Oracle. Похоже на отдельный API, который теперь использует старый стиль. –

5

Oracle планирует сертифицировать ODP.NET, Managed драйвер на Microsoft .NET Ядра вокруг конца календарный год 2017.
Oracle намерена поддерживать управляемую ODP.NET на .NET Core в операционных системах Windows и Oracle Linux. Управляемый ODP.NET может поддерживать дополнительные операционные системы. Oracle продолжит оценку поддержки других дистрибутивов Linux и объявит о дополнениях к списку сертификатов в будущем. Oracle не планирует сертифицировать более ранние версии, чем Microsoft .NET Core 2.0. .NET Ядро 2.0 содержит многочисленные возможности, которые делают управляемые сертификации ODP.NET можно на каркасе

Из этой статьи: http://www.oracle.com/technetwork/topics/dotnet/tech-info/odpnet-dotnet-core-sod-3628981.pdf

+7

Здравствуйте, 2018! #stillwaiting :( – andrecarlucci

0

наконец поддержки dotConnect for Oracle .net ядро ​​DevArt в начиная с версии «9.4.280».

+0

мне нужно оплатить? – Toolkit

+0

вы можете использовать экспресс-выпуск. –

+0

Express Edition не поддерживает .net core: https://www.devart.com/dotconnect/oracle/editions.html – andrecarlucci

0

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

+0

Можете ли вы дать us example? –

3

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

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

+1

Я получаю эту ошибку с помощью System.Data.OracleClient: Не удается загрузить DLL 'oci': указанный модуль не найден. (Исключение из HRESULT: 0x8007007E) – andrecarlucci

+0

Добавил комментарий, затем понял, что у меня есть Ответ: Кажется, это требует, чтобы клиент oracle был установлен. Хорошо работает на моей машине Windows (где у меня есть), но не на Linux (где я не сейчас). Попробует установить там и посмотреть, будет ли он тогда работать – Adam

+0

Ну, Я установил последний клиент Oracle мгновенно на мой компьютер CentOS и попробовал снова - ту же проблему. Пробовал копировать oci.dll с моей машины Windows в корневую папку API для linux (без большого перерыва так как это Windows .dll, но вы никогда не знаете), но это тоже не помогло. Кто-нибудь получил System.Data.OracleCLient, работающий под Linux с DotNetCore 2? – Adam

3

Бета-версия .Net Core Управляемый драйвер, выпущенный Oracle в конце января 2018 годаhttp://www.oracle.com/technetwork/topics/dotnet/downloads/net-downloads-160392.html. Поддерживаемая спецификация platfom в doc теперь Win и Linux.

Другие старые альтернативы с стандартными/Мгновенные клиенты 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> 

Моего Program.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(); 
      }   
     } 
    } 
} 
+0

Я получаю эту ошибку при использовании моно версии: Не удается загрузить DLL 'oci': указанный модуль не найден. (Исключение из HRESULT: 0x8007007E) – andrecarlucci

+0

• \t Должен быть установлен путь к клиенту Oracle. • \t Необходимо использовать ту же версию 32-битного/64-битного клиента Oracle, что и .Net Core • \t Для Linux необходимо использовать пакет nuget Mono.Data.OracleClientCore.Linux – Dubo

+0

О, я думал, что смогу получить избавиться от клиента Oracle, как в управляемой версии. Так грустно. Благодарю. – andrecarlucci

Смежные вопросы