问题标签 [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.
.net - LINQ to SQL for Oracle.ODP
LINQ to SQL 是否支持 Oracle.ODP?如果没有,Oracle 是否有类似的产品可用或正在开发中?
oracle - 使用 Oracle.DataAccess 连接数据库时出现问题
我公司的 DBA 为我正在处理的应用程序创建了一个新用户/密码。我使用 SQL Developer 测试了登录,并且可以很好地连接到数据库——我可以访问的所有表都在那里。
但是,在我的应用程序中,当我尝试使用相同的凭据通过 Oracle.DataAccess.dll 进行连接时,连接失败,提示“未处理的异常:Oracle.DataAccess.Client.OracleException ORA-1017:用户名/密码无效;登录被拒绝"
我已经检查并仔细检查以确保我传递了正确的用户/密码。我对 Oracle 有点陌生,所以我真的不知道从哪里开始寻找问题。有谁知道为什么会发生这种情况?
编辑澄清:
登录可以使用我的旧凭据,使用 Oracle.DataAccess,但不能使用最新的凭据。这是一个 .Net 控制台应用程序,用 C# 编写
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 参数由字符串 [] 填充。
随意讨论除了使用关联数组之外的其他方法,但提前知道这些解决方案不会被接受。不过,我有兴趣看到其他选择。
parameters - TABLE OF VARCHAR2 Oracle odp.net 的输出参数
我有这种类型:
程序get_array (p_arr out TableVarchar2 )
是...
如何使用OracleParameter
' 的输出来获取值?
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 注册表设置?
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()
通话返回后?
大型系统如何处理数据可能无法立即读取的事实?
oracle - 如何使用与我构建的版本不同的 ODP.NET 版本?
我有一个使用 ODP.NET 2.111.6.20 构建的应用程序 - VS 中的所有引用都设置为特定版本为 false,但是当我尝试在只有 2.111.6.0 的机器上运行该应用程序时,它会抛出一个错误提示找不到 2.111.6.20 程序集。如何让我的应用程序与任何版本的 ODP.NET 2.111 一起运行?
oracle - 大型数据集上的 ODP.Net 存储过程性能问题
在我们的一个数据库中进行 SELECT 查询时,我们遇到了一些主要的性能问题。请参阅下面的简单程序和相关代码。
在代码中,ExecuteReader() 方法在返回 30K 记录的查询上执行大约 10 秒。迭代阅读器需要 2 分钟(即使我没有将数据泵入任何其他对象)。30k 行数据集的 2 分钟对我们来说是不可接受的,因为我们期望有数百万的数据集。
这里有什么对你们来说很突出的吗?希望您在 ODP.NET 和 PL/SQL 方面的经验可能会有所帮助。
--
任何指导将不胜感激。
.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 经验的人,他们可以帮助我导航这个危险的领域并成功部署此服务。
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# 代码中的类型从“十进制”转换为“双精度”也不是一个真正的选择。
有任何想法吗?