在dotnet mvc应用程序中连接到Oracle数据库

时间:2018-03-07 18:47:07

标签: c# oracle .net-core

Oracle发布了测试版driver ODP for dotnet core 2(最后!)。但我不能让它发挥作用。有人做过吗?如果是,请将代码发送给我或帮我修好这个代码\ o

有用:我正在使用Visual Code,项目“dotnet new mvc”(。net 2),我通过Nuget Add Package工具安装Oracle.ManagedDataAccess.Client(CTRL + P,... ) 这是我的代码:

public static OracleConnection AbrirSigmaUser(AutenticacaoModel autenticacao)
        {
            try
            {

                string _connectionString;

                _connectionString = "Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.0.15)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=databaseName)));User Id=UserName;Password=***;";


                OracleConnection conexao = new OracleConnection();
                conexao.ConnectionString = _connectionString;

                //right here the program exit
                conexao.Open();             




                return conexao;
            }
            catch (System.Exception ex)
            {               

                throw new Exception("Não foi possível conectar ao banco de dados!" + "\nErro: " + ex.Message);
            }
        }

编译器抛出了很多关于缺少dll的例外,所以我通过Nuget Add Package工具安装了它们:

//required for connection
using Oracle.ManagedDataAccess.Client;
using System.Configuration;
using System.Security.Permissions;
using System.Security.Principal;

在添加了所有要求的dll之后,程序进入conexao.Open()并且永远不会回来,抛出未处理的异常:

Unhandled Exception: System.TypeLoadException: Could not load type 'System.Security.Principal.WindowsImpersonationContext' from assembly 'mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.
   at OracleInternal.ConnectionPool.PoolManager`3.CreateNewPRThreadFunc(Object state)
   at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
   at System.Threading.ThreadPoolWorkQueue.Dispatch()
The program '[8860] Sensatta-Analytcs.dll' has exited with code 0 (0x0).

是否真的需要进行简单的连接?

如果遗漏了某些内容(例如代码示例)以便找出问题,请告诉我!

4 个答案:

答案 0 :(得分:1)

对我来说,解决方案是仅安装Oracle.ManagedDataAccess.Core NuGet软件包。我还安装了Oracle.ManagedDataAccess,需要卸载它们以解决错误。

答案 1 :(得分:1)

Oracle.ManagedDataAccess.Core nuget 包安装到您的项目中。
确保您的 .csproj 文件中包含以下代码:

<PackageReference Include="Oracle.ManagedDataAccess.Core" Version="3.21.1" />

同时从您的项目中卸载“Oracle.ManagedDataAccess”
确保以下代码已从您的 .csproj 文件中删除

<PackageReference Include="Oracle.ManagedDataAccess" Version="19.10.1" />

答案 2 :(得分:0)

正如@Lesiak所说,我使用了错误的包(右边是Oracle.ManagedDataAccess.Core.dll)。但这也是其他人可能会陷入的错误。因为从Oracle Link下载zip文件时,dll名称为Oracle.ManagedDataAccess.dll而不是Oracle.ManagedDataAccess.Core.dll容易出错。

答案 3 :(得分:0)

对我来说,把以前版本的 Oracle.ManagedDataAccess.Core 放在工作上,最后一个版本有问题。