簡體   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