问题标签 [odp.net]

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 投票
4 回答
8813 浏览

.net - LINQ to SQL for Oracle.ODP

LINQ to SQL 是否支持 Oracle.ODP?如果没有,Oracle 是否有类似的产品可用或正在开发中?

0 投票
1 回答
3124 浏览

oracle - 使用 Oracle.DataAccess 连接数据库时出现问题

我公司的 DBA 为我正在处理的应用程序创建了一个新用户/密码。我使用 SQL Developer 测试了登录,并且可以很好地连接到数据库——我可以访问的所有表都在那里。

但是,在我的应用程序中,当我尝试使用相同的凭据通过 Oracle.DataAccess.dll 进行连接时,连接失败,提示“未处理的异常:Oracle.DataAccess.Client.OracleException ORA-1017:用户名/密码无效;登录被拒绝"

我已经检查并仔细检查以确保我传递了正确的用户/密码。我对 Oracle 有点陌生,所以我真的不知道从哪里开始寻找问题。有谁知道为什么会发生这种情况?

编辑澄清:

登录可以使用我的旧凭据,使用 Oracle.DataAccess,但不能使用最新的凭据。这是一个 .Net 控制台应用程序,用 C# 编写

0 投票
2 回答
33029 浏览

sql - 如何在 SQL 查询中使用 Oracle 关联数组

ODP.Net 公开了将关联数组作为参数从 C# 传递到 Oracle 存储过程的能力。这是一个很好的功能,除非您尝试在 sql 查询中使用该关联数组中包含的数据。

这样做的原因是它需要上下文切换 - SQL 语句需要 SQL 类型,并且像这样传递到 PL/SQL 的关联数组实际上被定义为 PL/SQL 类型。我相信在 PL/SQL 包/过程/函数中定义的任何类型都是 PL/SQL 类型,而在这些对象之外创建的类型是 SQL 类型(如果您可以更清楚地说明这一点,请这样做,但这不是目标问题)。

因此,问题是,您将使用哪些方法将 PL/SQL 关联数组参数转换为可以在过程中用于 sql 语句的东西,如下所示:

对于本示例,“associativeArray”是一个简单的 varchar2(200) 表,由 PLS_INTEGER 索引。在 C# 中,associativeArry 参数由字符串 [] 填充。

随意讨论除了使用关联数组之外的其他方法,但提前知道这些解决方案不会被接受。不过,我有兴趣看到其他选择。

0 投票
1 回答
2451 浏览

parameters - TABLE OF VARCHAR2 Oracle odp.net 的输出参数

我有这种类型:

程序get_array (p_arr out TableVarchar2 )是...

如何使用OracleParameter' 的输出来获取值?

0 投票
5 回答
35039 浏览

oracle - 更改 Oracle 客户端注册表中 NLS_LANG 设置的影响

我们正在从 .NET Microsoft oracle 驱动程序迁移到 ODP.NET 驱动程序。

我们遇到的问题之一是这个错误:

ORA-12705: 无法访问 NLS 数据文件或指定的环境无效

我们能够通过修改注册表和更改设置来停止错误(见这个问题

在我们的例子中,我们改变了

HKEY_LOCAL_MACHINE - SOFTWARE - ORACLE - NLS_LANG

设置为 NA

HKEY_LOCAL_MACHINE - SOFTWARE - ORACLE - HOME0 - NLS_LANG

设置正确

我的问题是为什么注册表中会有不同的 NLS_LANG 设置,并且更改此值是否会产生任何影响?


更新:我刚刚在Oracle NLS FAQ中找到了以下内容

对于 Oracle 版本 7:

HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE

对于 Oracle 数据库版本 8、8i 和 9i:

HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\HOMEx\

其中“x”是标识 Oracle 主目录的唯一编号。

HOME0是第一次安装

对于 Oracle 数据库 10g:

HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\KEY_<oracle_home_name>

在那里你有一个名字的条目 NLS_LANG

好的,所以不同版本有不同的注册表设置......

笔记:

有些人在 HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE 未安装版本 7 时发现 NLS_LANG 设置为“NA”而感到困惑。这用于向后兼容,可以忽略。

我有 Oracle 9i,所以现在我更加困惑 - 为什么 ODP.NET dll 查看 Oracle 7 注册表设置?

0 投票
1 回答
1088 浏览

oracle - 处理“异步”提交的好方法是什么?

我有一个 WCF 服务,它使用ODP.NET从 Oracle 数据库中读取数据。该服务也写入数据库,但间接地,因为所有更新和插入都是通过我通过 COM+ 访问的旧业务逻辑层实现的,我将其包装在TransactionScope中。旧层通过 ODBC 而不是 ODP.NET 连接到 Oracle。

我遇到的问题是,因为 Oracle 使用两阶段提交,并且由于较旧的业务层使用的是 ODBC 而不是 ODP.NET,所以事务有时会TransactionScope.Commit()在数据实际可用于从服务层读取之前返回。

我在 Stack Overflow 上看到了一个类似的帖子,关于一个 Java 用户遇到这样的问题。

Oracle 的一位代表发帖称,我对这个问题无能为力:

这可能是由于 OLETx ITransaction::Commit() 方法的行为方式。在 2PC 的第 1 阶段(即准备阶段)之后,如果一切成功, 即使资源管理器实际上还没有提交,提交也可以返回. 毕竟,成功的“准备”是保证资源管理器在此之后不能任意中止。因此,即使资源管理器因为没有收到来自 MSDTC 的“提交”通知(由于通信失败)而无法提交,组件的提交请求也会成功返回。如果您立即从表中选择行,您有时可能会在执行选择后看到实际提交发生在数据库中。因此,由于一致的读取语义,您的选择将不会看到新行。在 Oracle 中我们对此无能为力,因为“在第 1 阶段成功后提交成功”优化是 MSDTC 实施的一部分。

所以,我的问题是:

我应该如何处理可能的延迟(通过标题“asyc”)的问题,以确定 2PC 的第二部分何时实际发生,所以我可以确定我插入(间接)的数据实际上可以被选择Commit()通话返回后?

大型系统如何处理数据可能无法立即读取的事实?

0 投票
1 回答
1152 浏览

oracle - 如何使用与我构建的版本不同的 ODP.NET 版本?

我有一个使用 ODP.NET 2.111.6.20 构建的应用程序 - VS 中的所有引用都设置为特定版本为 false,但是当我尝试在只有 2.111.6.0 的机器上运行该应用程序时,它会抛出一个错误提示找不到 2.111.6.20 程序集。如何让我的应用程序与任何版本的 ODP.NET 2.111 一起运行?

0 投票
3 回答
1686 浏览

oracle - 大型数据集上的 ODP.Net 存储过程性能问题

在我们的一个数据库中进行 SELECT 查询时,我们遇到了一些主要的性能问题。请参阅下面的简单程序和相关代码。

在代码中,ExecuteReader() 方法在返回 30K 记录的查询上执行大约 10 秒。迭代阅读器需要 2 分钟(即使我没有将数据泵入任何其他对象)。30k 行数据集的 2 分钟对我们来说是不可接受的,因为我们期望有数百万的数据集。

这里有什么对你们来说很突出的吗?希望您在 ODP.NET 和 PL/SQL 方面的经验可能会有所帮助。

--

任何指导将不胜感激。

0 投票
3 回答
10055 浏览

.net - 部署使用 Oracle.DataAccess 的 Web 服务器会导致各种组装错误

我的开发机器是Vista x64。

我正在使用 WCF Web 服务来构建连接到 oracle 10g 数据库的 Web 服务。

开始开发时,我无法在 32 位 Oracle.DataAccess.dll 上使用 VS2008 的内置 WCF 测试工具 [WCFTestClient],该工具会在您按 F5 [Go] 时启动,因为我在 Oracle 对象上收到 System.BadImageFormatException。因此,在我的开发环境中,我为引用的程序集切换到了 ODP.NET 64 位版本,效果很好。

我可以部署到我的本地 IIS [7],但前提是我使用 32 位 Oracle.DataAccess.dll。

我正在尝试部署到安装了 .NET 3.5 sp1 和 Oracle 10g 数据库的 Win2003 [IIS 6]。此服务器上的其他 Web 应用程序成功使用 oracle 连接。

如果我从 web.config 文件中删除对 Oracle.DataAccess 的所有引用,并确保我的 bin/ 文件夹中没有 Oracle.DataAccess.dll,我可以调出默认服务元数据页面 [s],但调用服务通过 SOAP 客户端会导致错误:

“无法加载文件或程序集 'Oracle.DataAccess, Version=10.2.0.100, Culture=neutral, PublicKeyToken=89b483f429c47342' 或其依赖项之一。系统找不到指定的文件。”

但是,如果我将 Oracle.DataAccess.dll 的副本放在我的 bin/ 文件夹中,我会得到:

“无法加载文件或程序集 'Oracle.DataAccess' 或其依赖项之一。定位的程序集的清单定义与程序集引用不匹配。(来自 HRESULT 的异常:0x80131040)”

尝试在 Web 浏览器中加载 .svc 页面时。

如果我将程序集引用添加到我的 web.config,我会收到配置错误:“无法加载文件或程序集 xxx”

我想我正在寻求了解程序集缓存的帮助,以及具有 ODP.net 经验的人,他们可以帮助我导航这个危险的领域并成功部署此服务。

0 投票
2 回答
21658 浏览

c# - Oracle 数字转 C# 十进制

我知道互联网上有几个关于这个问题的主题和帖子,我已经阅读了它们(不是每一篇文章,我不得不承认)但没有一个能让我完全满意。

我的情况:
我使用 ODP.net(dll 版本 2.111.6.0)来访问 Oracle DB(版本 10 + 11)和 DataReader 来检索数据(.NET 3.5,C#)。

使用此代码会导致“ System.OverflowException(算术运算导致溢出。)

这个结果的值为' 3,00000000000000000000000000000000000000000000000000000000000E-126 '

现在我必须找到一些方法来正确检索和评估这个值——数据库也被其他不受我控制的应用程序使用,因此不可能进行更改。

将我的 C# 代码中的类型从“十进制”转换为“双精度”也不是一个真正的选择。

有任何想法吗?