问题标签 [system.data.oracleclient]

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 回答
43 浏览

c# - 您可以更改默认情况下 OracleConnection 使用的提供程序吗?

我有一个应用程序使用System.Data.OracleClient.OracleConnection(是的,我知道这是过时的)而不指定提供程序。它似乎MSDORA默认使用。我可以更改提供程序而不在连接字符串上添加提供程序吗?例如在 app.config 文件或机器范围的设置中?

0 投票
1 回答
19808 浏览

asp.net - ora-28040 没有从 Oracle 客户端 12C 到 Oracle 数据库 19c 的匹配身份验证协议

我们最近将数据库迁移到 19c。有一些使用 system.data.oracleclient 连接到 Oracle db 的 .net 应用程序。安装的Oracle客户端版本为12C。数据库升级后,.net 应用程序由于 ORA-28040 No matching authentication protocol 错误而无法连接到数据库。

0 投票
0 回答
105 浏览

c# - OracleCommandBuilder.DeriveParameters() 抛出 OracleException: ORA-06564: 对象不存在

在 .NET Framework 中使用 ADO.NET 附带的 OracleClient,我试图OracleCommandBuilder.DeriveParameters()在数据库中的过程上调用方法,但我不断收到OracleException消息:ORA-06564: object CustOrdersOrders does not exist,即使我成功创建了过程。我更熟悉 SQL Server,所以也许我在这里遗漏了一些东西。

SQL

文件 1:

文件 2

这两个文件都在 SQL*Plus 中作为@"path\to\file1.sql".

代码

这是使用企业库数据访问应用程序块,它最终包装了 ADO.NET API。

当我使用相同的连接运行直接 SQL 查询时,它们会成功。

更多细节

这实际上是为数据访问应用程序块编写的单元测试的一部分,我在这里分叉以试图恢复这个库。这就是它使用System.Data.OracleClientODP.NET 而不是 ODP.NET 的原因。https://github.com/tsahi/data-access-application-block/blob/master/source/Tests/Oracle.Tests.VSTS/OracleParameterDiscoveryFixture.cs上的整套测试以类似的方式中断。

测试在我本地安装的 Oracle 数据库 XE 上运行。

更新

在@madreflection 提出问题之后,是的,以下代码运行正确:

其中“AddCountry”定义为

不过,有趣的是,在这种情况下,OracleDatabasedbEntlibTest

然后有另一个文件定义了这个过程的主体

0 投票
1 回答
260 浏览

c# - OracleCommandBuilder.DeriveParameters() 抛出 OracleException:ORA-06564:对象不存在 ORA-06512:在“SYS.DBMS_UTILITY”

在 .NET Framework 中使用 ADO.NET 附带的 OracleClient,我试图OracleCommandBuilder.DeriveParameters()在数据库中的过程上调用方法,但我不断收到OracleException消息:ORA-06564: object CustOrdersOrders does not exist,即使我成功创建了过程。我更熟悉 SQL Server,所以也许我在这里遗漏了一些东西。

SQL

文件 1.sql:

文件 2.prc:

文件 3.prc

所有这些文件都在 SQL*Plus 中以@"path\to\file1.sql".

应用程序配置

代码

更多细节

这发生在我为企业库数据访问应用程序块创建的一个分支,试图恢复这个库。这就是它使用System.Data.OracleClientODP.NET 而不是 ODP.NET 的原因。

测试在我本地安装的 Oracle 数据库 XE 上运行。

0 投票
2 回答
806 浏览

.net - 我们可以在.Net 中针对 Oracle 19c 使用 System.Data.OracleClient 吗?

所以我们将 Oracle 12.2 迁移到 19c,连接到 oracle 服务的 Asp.Net 应用程序现在失败并出现以下错误:Oracle 12560:TNS 协议适配器错误

在任何事情之前,我想确认.net dll System.Data.OracleClient 将适用于 Oracle 19c 还是我们正在考虑强制迁移到 ODP.Net?

0 投票
1 回答
56 浏览

c# - 将太多参数从 C# 传递到 Oracle 存储过程

我创建了一个 REST API,它将使用 80 多个键/值对来使用 json 数据。我想将这 80 多个键及其值保存在 Oracle DB 表中。现在我打算将所有 80 个参数添加为命令参数。

有没有其他方法可以做到这一点?

而在DB端,除了在存储过程中提到80个输入参数之外,还有其他方法可以同时接受这些输入参数吗?

0 投票
1 回答
233 浏览

sql - 在 PowerShell 中运行包含 PL/SQL 的 .sql 文件

我想找到一种使用 .NET Data Proider for Oracle (System.Data.OracleClient) 在 PowerShell 中运行包含 PL/SQL 的 .sql 文件的方法。我肯定会避免使用 sqlplus 来完成这项任务。

这就是我现在的位置

但我不断收到以下错误消息“ORA-00933:SQL 命令未正确结束

该文件的内容非常基本:

0 投票
0 回答
112 浏览

.net - 将 .Net 框架包装到核心:System.Data.OracleClient

背景
我目前面临的问题是我的 ASP.Net Core 5.0 应用程序突然需要使用特殊库(来自外部提供程序)与数据库进行通信。不幸的是,这个库针对的是 Framework 4.7.2。
在不久的将来将库升级到 .Net Core/Standard 是不现实的。
因此,我的想法是编写一个具有以下结构的包装器:
应用程序类型:Worker 服务 ↔ 标准库 ↔ 框架库
目标框架:.Net Core 5.0 ↔ .Net Standard 2.0 ↔ Framework 4.7.2
出于测试目的,我使用了 Worker服务而不是 ASP.Net Web 应用程序。框架库引用了上述库,该库不适用于 .Net Core。

问题
起初,我遇到了错误:

无法加载文件或程序集“System.Configuration.ConfigurationManager”</p>

但我通过在标准库中加载 NuGet 包来解决它。现在我在另一个程序集中遇到了同样的问题:

无法加载文件或程序集“System.Data.OracleClient,版本=2.0.0.0,文化=中性,PublicKeyToken=b77a5c561934e089”

不幸的是,OracleClient包已被弃用,标准库没有可用的 NuGet 包。因此,之前的解决方案不再有效。

尝试的解决方案
我尝试使用 Oracle.ManagedDataAccess 但无济于事。我认为选择的版本应该是兼容的,但我也试过这个(不同的组合):

  • 而不是 .Net 5 → .Net 3.1
  • 代替 .Net Standard 2.0 → .NetStandard 2.1
  • 而不是 .Net Framework 4.7.2 → .Net Framework 4.6.1

问题

  1. 我错了目标框架的版本兼容吗?
  2. 我不明白在哪里需要加载 NuGet 包。我认为在框架库中引用它们就足够了。但在 ConfigurationManager 的情况下,我必须引用标准库中的包。
  3. 有没有办法使用在 .Net 5 应用程序或 .Net 标准库中引用 System.Data.OracleClient 的框架库?

我快要放弃了,但我不得不将我的 Web 应用程序降级为框架,这需要大量无用的工作。

0 投票
1 回答
50 浏览

c# - 程序使用 System.Data.OracleClient 连接到 Oracle 数据库但找不到 tnsnames

我有一个 WinForms 程序,它使用已弃用的 System.Data.OracleClient 连接到 Oracle 数据库服务器。当我尝试在另一台计算机上安装该程序时,该程序正在尝试使用文件中定义的 SID tnsnames.ora,但找不到该文件。

我应该把tnsnames.ora文件放在哪里,以便程序可以看到它?

0 投票
0 回答
15 浏览

quartz-scheduler - Quartz.Net:不支持连接参数:'DATABASE'

我有一个 Quartz for .Net 服务,它使用System.Data.OracleClient从 Oracle 12c 数据库中检索数据。从控制台应用程序尝试此操作时,我能够连接并获取值,但是一旦我迁移代码并将其捆绑到 Quartz 调度程序服务中,我就会收到错误

不支持连接参数:'DATABASE'

我已经在几个连接到 Sql Server 的 Quartz.net 作业上实现了这一点,没有任何问题。这个问题似乎是 Oracle 提供程序的连接字符串所特有的。

我的 Quartz 服务实现取自这里的示例:

https://medium.com/better-programming/asp-net-core-windows-service-task-scheduler-daily-weekly-monthly-700a569d502a

我的连接字符串如下:

对于上下文,随附的查询操作是:

根据某些来源的建议,我尝试使用服务器而不是数据源,但我仍然遇到相同的错误: