问题标签 [oracle-manageddataaccess]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
173 浏览

.net - Lightswitch 应用程序在 IIS 上部署时无法找到“Oracle.ManagedDataAccessDTC”

我在 Visual Studio 2013 中创建了一个没有自定义代码的基本 HTML Lightswitch 应用程序。它连接到 Oracle 数据库并在本地运行良好。

我将应用程序部署到带有 IIS 的服务器,并且在导航创建的 url 时加载应用程序,但在应用程序通常显示 Oracle 数据库中的值列表之前,我收到“底层提供程序在 EnlistTransaction 上失败”错误。

我运行堆栈跟踪以找到以下错误。看起来应用程序没有找到 Oracle 数据访问客户端 (Oracle.ManagedDataAccessDTC):

我使用包含 Oracle.ManagedDataAccessDTC 的 ODAC 12c Release 4(12.1.0.2) 安装程序在本地机器上安装了 Oracle 数据访问客户端。

我验证我的机器和服务器安装了相同版本的 Oracle.ManagedDataAccessDTC。

0 投票
1 回答
1619 浏览

asp.net - .NET 的 ODP 托管提供程序无法加载。找不到服务

当我为使用Oracle.ManagedDataAccess的项目打开 Visual Studio 2015 时,出现错误

w3wp.exe 消息中出现未处理的 Microsoft.NET Framework 异常。

当我查看事件查看器时,我看到了 devenv 的这条消息

.NET 的 ODP 托管提供程序中出现意外错误。无法加载数据提供程序“ODP Managed Provider for .NET”。找不到 {6a61ae9b-cbff-48d1-a377-51ed463b37bc} 服务。

设置

  • 操作系统是 Windows 10
  • 视觉工作室 2015
  • Oracle.ManagedDataAccess NuGet 包 v12.1.24160419
  • 解决方案有
    • Web API 项目 .NET Framework 4.5.2
    • 2个类库项目.NET Framework 4.5.2
    • 单元测试项目 .NET Framework 4.5.2

我可以WebAPI毫无问题地调用我的服务,并且单元测试运行良好,所以当我启动 Visual Studio 时它似乎只是一个问题。这比什么都麻烦。

我发现一些文章提到要检查 Oracle 的 machine.config。ManagedDataAccess客户端条目,它们确实存在于我的 machine.config Framework 和 Framework64 文件夹中。

以前有人找到解决方案吗?

0 投票
2 回答
8575 浏览

c# - 使用带有输出参数的实体框架调用 Oracle 存储过程?

我有一个简单的 Oracle 存储过程,它传入三个参数,并有一个输出参数:

我正在尝试使用 Entity Framework 6.1 来取回该OutAssetRegistered值,但是,在调用后我得到一个空值,SqlQuery无一例外:

//------------------------------------------------ ------------

我一直在努力让这个工作无济于事,检查了不同的博客,所有其他的 crud 操作都有效,谁能帮助并指导我哪里出错了?

0 投票
1 回答
202 浏览

asp.net - Windows 用户名未传递给 Oracle DB?

我正在使用 Oracle ManagedDataAccess 驱动程序从 .NET Web 应用程序访问数据库。当以 Windows 用户 x 在 IIS Express 下本地运行它时,这工作正常,但是当我将我的站点发布到另一个使用 IIS 的服务器时,我得到错误

ORA-01017: 用户名/密码无效;登录被拒绝

我查看了从 Oracle 进行的尝试登录,如此处所述。从 IIS 成功登录的地方,我可以看到列出的 Windows 用户名 OPS$(USERNAME)。

有趣的是,在 IIS 登录不成功的地方,我看到传递了错误的用户名 - 用户名 = OPS$(NAME_OF_MY_WEB_APPLICATION)。我不知道从哪里得到将应用程序名称替换为用户名的想法。

我的连接字符串对于两种环境都是相同的: User ID=/ ;Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP))(HOST=...(PORT=1521)(CONNECT_DATA=(SERVICE_NAME=... )));

0 投票
1 回答
4482 浏览

c# - 执行与 Oracle 的连接时,“安全包中没有可用的凭据”

在上次 Windows 更新后,执行与 Oracle 数据库的连接的测试开始失败,并出现 AuthenticationException。下面提供了消息和堆栈跟踪:

从 VS Test Runner 或从命令行使用 mstest 运行测试时会引发异常。Visual Studio 中的 Oracle 数据库工具会引发相同的异常。
在应用程序中使用 Oracle ManagedDataAccess 提供程序。包版本为 12.1.2400。
操作系统:Windows 10 Pro x64
本地发布到 IIS 的应用程序运行良好。数据库连接没有任何问题。
有人知道如何解决这个问题吗?

提前致谢!

0 投票
2 回答
4555 浏览

.net - 如何使用带有实体框架 6 的 TNS 别名连接到 Oracle DB?

在我的设置中,我有一个使用 Visual Studio 2015 构建的 .NET 应用程序,试图使用 Entity Framework 6 访问 Oracle 12c 数据库上的数据。

这是我为实现这一目标所做的事情:

  • 在 oracle.com上遵循了有关如何使用 nuget 安装官方 Oracle ODP.NET、托管实体框架驱动程序及其依赖项的教程。
  • 我确保可以找到 tnsnames.ora 和 sqlnet.ora。(环境变量TNS_ADMIN配置正确)
  • 我为 oracle 驱动程序启用了跟踪日志记录,以查看此处实际发生的情况。
  • 我创建了一个映射一些实体的 EDMX 文件(这已经需要下面描述的解决方法)

这是我的 App.config 的样子(引入换行符以提高可读性):

尝试访问数据库时失败并出现异常:

"ORA-12533: Netzwerksession: Syntaxfehler bei Verbindungstransportadresse"

根据oracle docs翻译为

“ORA-12533: TNS: 非法地址参数”

跟踪日志显示 tnsnames.ora 已正确解析。

当使用 IP 地址和端口而不是 TNS 名称时,连接工作正常。但是由于 tnsnames.ora 由我们公司的数据库管理员管理,因此无法使用 IP 地址来寻址服务器。

我还应该注意,旧驱动程序(例如 Oracle.DataAccess.dll)使用此设置访问数据库没有问题。

编辑:这是我现在使用的 tnsnames.ora 文件:

我在这里做错了什么?

注意:有类似的问题。但是,在那种情况下有帮助的解决方案在这里没有帮助,并且遇到的异常与这里遇到的不同:

0 投票
1 回答
537 浏览

c# - C#调用替换后Oracle包无效

我假设我在如何从 C# 运行 SQL 脚本方面做错了,但是在互联网上进行了大量搜索之后,我仍然不知道出了什么问题......

我在通过 C# 加载 Oracle 包和包体时遇到问题。当我通过脚本在 SQL*PLUS 中加载包时,随后对脚本中函数的调用正常工作。当我从 C# 调用它时,它也可以工作。但是,当我从 C# 加载相同的脚本时,脚本的运行似乎可以正常运行,但随后对包函数的调用(来自 C# 和 SQL*PLUS)失败并出现 PLS-00905 错误(“object ANON.MY_PKG is无效的”)。

SQL 脚本(“simple.sql”)的内容是:

在 SQL*PLUS 中运行它可以正常工作...

然后在 C# 程序中调用该函数(作为 SQL*PLUS 中使用的同一 Oracle 用户)可以正常工作,直到在程序中重新运行 SQL 脚本。

重新加载(“loadMyPackage”)后它会出错。具体来说:

如何让 C# 正确运行脚本?

更新: 根据反馈,我将 SQL 脚本分成两部分。第一部分(“simple_A.sql”)现在是:

第二部分(“simple_B.sql”)是:

在此之后,更改,我通过以下方式验证它在 SQL*PLUS 中仍然有效:

然后我通过以下更改更新 C# 代码以使用这两个脚本:

但是,我仍然遇到同样的错误。具体来说,现在的输出如下:

更新 #2: 根据贾斯汀的评论,我将我的 sql 脚本拆分为两个单独的文件,并从中删除了“/”字符。他们现在是:

简单_A.sql:

simple_B.sql

通过这些更改以及第一次更新中的更改,代码可以正常工作。

在让代码正常工作后,我根据 Justin 的另一条评论添加了一个额外的位,这是一种识别错误原因的方法。具体来说,我添加了一个 printErrors 函数,并在我的 C# 代码中添加了对它的调用。对代码的添加和修改如下:

添加 printErrors 代码后,错误的原因就很容易看到了。第一次更新的错误 SQL 版本会产生以下输出:

[注意:上述错误信息来自最终代码,当给定有错误的 sql 脚本时。sql 脚本的最终版本没有错误。]

因此,这段代码不仅开始工作,而且现在能够在失败的情况下提供描述性错误信息。

0 投票
4 回答
5348 浏览

c# - 如何使用实体框架使用序列在 Oracle 中插入标识值

在 Oracle 数据库中,它的 ID 列定义为数字:

在此处输入图像描述

...以及表格的相应序列...:

在此处输入图像描述

如何确保 ID 列获得序列中的下一个值?

我正在使用最新的 Oracle.ManagedDataAccess 和 Oracle.ManagedDataAccess.EntityFramework + EF6x。

0 投票
2 回答
5264 浏览

c# - 在 C# 中使用实体框架读取 Oracle 数据连接

我有 Oracle 数据库 11g,我想使用实体框架从中读取数据。在第一步中,我试图建立数据库连接并在连接时获取状态。但是我收到以下错误;

我的连接字符串如下;

这是我尝试测试代码的地方,我收到错误

基本 DBContext 类

DbContext 类

模型类

在 TNS 工作的其他项目中

从 Visual Studio 中的数据属性复制连接字符串,我使用 .NET Framework Data Provider for Oracle

0 投票
1 回答
1088 浏览

c# - 在数据库中更新 Oracle TIMESTAMP(0) WITH TIME ZONE 值的正确方法

我正在尝试更新具有 type 列的表TIMESTAMP(0) WITH TIMEZONE

我尝试了几种方法都没有成功,因为TIMESTAMP写入数据库的方式没有偏移格式,例如-05:00美国东部时间。它被保存AMERICA/NEW_YORK为时区,这会导致无法正确处理此问题的另一个应用程序出现问题。

当前的:28-NOV-16 10.51.43.000000000 AM AMERICA/NEW_YORK

期望:28-NOV-16 10.51.43.000000000 AM -05:00

这里的许多帖子主要是在从数据库中检索数据时对其进行格式化;其他示例使用 SqlPlus 进行描述,而不是在 C# 中。

我也尝试过modified_date=to_timestamp(:modified_date, 'MM/DD/YYYY HH:mi:ss'),但这会产生异常,因为时区格式不正确。

在 C# 中完成此任务的正确方法是什么?日期/时间戳列是否应该始终使用字符串转换来写入?