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