Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何从.Net Core连接到Oracle数据库连接_C#_Oracle_Asp.net Core_Database Connection - Fatal编程技术网

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

C# 如何从.Net Core连接到Oracle数据库连接,c#,oracle,asp.net-core,database-connection,C#,Oracle,Asp.net Core,Database Connection,在.netCore库中,我希望连接到Oracle数据库。我有办法做到吗 我试过这些建议,但都不管用,也许是从那以后删除的?正如您在我的project.json中看到的,我正在尝试使用“net461” 我目前正在尝试通过老式的ADO.Net使用Oracle.ManagedDataAccess.Client。我还知道Oracle尚未购买.netCore连接器。但即使在那里,我也无法让它工作,它很难获得系统。包括数据在内,每当我尝试添加它时,它都会出错 myproject.json如下所示: {

在.netCore库中,我希望连接到Oracle数据库。我有办法做到吗

我试过这些建议,但都不管用,也许是从那以后删除的?正如您在我的project.json中看到的,我正在尝试使用“net461”

我目前正在尝试通过老式的ADO.Net使用Oracle.ManagedDataAccess.Client。我还知道Oracle尚未购买.netCore连接器。但即使在那里,我也无法让它工作,它很难获得系统。包括数据在内,每当我尝试添加它时,它都会出错

myproject.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,我正在努力导入它


我不喜欢任何特定的方法,我只想在此时找到最合理的选择

您应该从frameworks节点下的project.json中删除“dnxcore50”(这意味着您的项目不再是纯.net核心应用程序),然后重试。据我所知,您目前无法通过.net core连接到oracle,检查可能会有所帮助

oracle计划在2017日历年年底左右认证Microsoft.net core上的托管驱动程序ODP.net。
Oracle打算在Windows操作系统和Oracle Linux上支持.NET核心上的托管ODP.NET。 托管ODP.NET可能支持其他操作系统。Oracle将继续评估对的支持 其他Linux发行版,并将在将来宣布添加到认证列表中。 Oracle不打算在Microsoft.NET Core 2.0之前的版本上进行认证。NETCore2.0包含 使托管ODP.NET认证在框架上成为可能的众多功能

从这篇文章中:


更新:Beta版发布了

最终devart的.net核心支持版本为“9.4.280”

我们通过设置oracle链接服务器并使用存储过程从SQL server调用oracle链接服务器来实现这一点。你可以试试。您可以使用Openquery或Exec。。在[likedserver]让查询在Oracle端执行。

如其他回答中所述,Oracle尚未发布其托管客户端的软件包,但计划在今年晚些时候发布


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

Oracle于2018年1月底发布的Beta版本.Net Core Managed driver。 doc中支持的platfom-sinetinet现在是Win和Linux

努吉:

使用standart/instant Oracle客户端的其他旧备选方案:

  • 对于.Net Core 2.0 I建议使用oracleClientCore-2.0:。Nuget:我在Win和Linux平台上成功地使用了它。这是我的
  • 另外System.Data.OracleClient也适用于2.0-请参阅文章。但我只在Win平台上测试它
  • 对于.Net Core>=1.0,您可以基于Mono的Oracle客户端为.Net Core使用非官方的Oracle客户端 Nuget:
最后一个备选方案的my 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>
基于此,他们发布了一个新的测试版ODP。​网芯

您还可以在nuget上找到Oracle发布的

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

使用Oracle.ManagedDataAccess.Client;
public void Execute(字符串queryString、字符串connectionString)
{
使用(OracleConnection连接=新的OracleConnection(connectionString))
{
OracleCommand=新的OracleCommand(查询字符串,连接);
command.Connection.Open();
command.ExecuteNonQuery();
}
}

基本上,您可以像官方的.NET System.Data.SqlClient一样使用它(很容易找到相关的在线教程),只需用OracleConnection替换代码中的任何地方,用OracleCommand替换SqlCommand即可。

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

{
 "ConnectionStrings": {
   "connection-db": "Data Source=192.168.1.3:1521/ORACLEVM;User 
                     Id=userId;Password=123;Validate Connection=true;"
  }
}
在项目中打开Manage Nuget软件包,添加以下软件包:

Microsoft.Extensions.Configuration.Json(在.net core中使用Configuration manager)

Oracle.ManagedDataAccess.Core(.Oracle数据访问客户端的net Core版本)


如果您将oracle数据库与.NET core一起使用,则需要安装几个nuget软件包

  • Microsoft.EntityFrameworkCore
  • Oracle.EntityFrameworkCore
  • Oracle.ManagedADataAccess.Core
  • 之后,需要在startup类的configureServices方法中编写一些代码

    public void ConfigureServices(IServiceCollection services)
    {
        services.AddDbContext<OracleDbContext>(options=>options.UseOracle(Configuration.GetConnectionString("OracleConnection")));            
    }
    
    appSettings.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}:"
     }
    }
    

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

    我现在已删除该字符串,但正如您所建议的,它仍然使我无法连接到Oracle。现在看起来像是一个使用旧样式的单独API。你能给我们举个例子吗?我在使用mono版本时遇到这个错误:无法加载DLL“oci”:找不到指定的模块。(HRESULT的例外:0x8007007E)•必须设置到Oracle客户端的路径。•必须使用与.Net Core相同版本的32位/64位Oracle客户端•对于Linux,必须使用nuget软件包Mono.Data.OracleClientCore.Linux。噢,我想我可以像在托管版本中一样摆脱Oracle客户端。如此悲伤。谢谢。刚刚测试了beta.Net内核管理驱动程序(在Windows上),到目前为止,它工作得很好,迫不及待地等待正式发布!我使用System.Data.OracleClient获得此错误:无法加载DLL“oci”:找不到指定的模块。(HRESULT的例外:0x8007007E)添加了一条注释,然后是realis
    public void ConfigureServices(IServiceCollection services)
    {
        services.AddDbContext<OracleDbContext>(options=>options.UseOracle(Configuration.GetConnectionString("OracleConnection")));            
    }
    
    public class OracleDbContext : DbContext
    {
       public OracleDbContext(DbContextOptions options):base(options){}
    }
    
    {
    "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}:"
     }
    }