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

Dav*_*d C 21 c# oracle database-connection asp.net-core

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

我已经在另一个SO帖子上尝试了这些建议,但它不起作用,也许从那以后就删除了?正如你在我的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"
      ]
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

这就是我此刻尝试这样做的方式.

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;
    }
}
Run Code Online (Sandbox Code Playgroud)

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

我没有根据任何特定的方式做到这一点,我只想在这个时间点找到最合理的选择.

Dub*_*ubo 13

甲骨文于2018年1月底发布的Beta版.Net Core Managed驱动程序 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>
Run Code Online (Sandbox Code Playgroud)

我的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();
            }           
        }
    }
}
Run Code Online (Sandbox Code Playgroud)


Rem*_*din 9

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();
    }
}
Run Code Online (Sandbox Code Playgroud)

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


Ngu*_*àng 6

Oracle计划在2017日历年左右对Microsoft .NET Core上的ODP.NET,托管驱动程序进行认证
.Oracle打算在Windows操作系统和Oracle Linux上支持.NET Core上的托管ODP.NET.托管ODP.NET可能支持其他操作系统.甲骨文将继续评估对其他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

更新:Beta发布了ODP.NET Core

  • 你好2018年!#stillwaiting :( (13认同)

Ama*_*har 5

如果您使用带有.NET core的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")));            
}
Run Code Online (Sandbox Code Playgroud)

OracleDbContext 类继承自 DbContext 类,OracleConection 连接字符串在 appSettings.json 文件中设置。

OracleDbContext.cs

public class OracleDbContext : DbContext
{
   public OracleDbContext(DbContextOptions options):base(options){}
}
Run Code Online (Sandbox Code Playgroud)

应用程序设置.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}:"
 }
}
Run Code Online (Sandbox Code Playgroud)

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