问题标签 [odp.net-managed]
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.
c#-4.0 - ODP.NET + CLOB = ORA-01461:只能绑定 LONG 值以插入 LONG 列
我在尝试使用 CLOB 列将某些对象插入或更新到我的表中时遇到了麻烦。更新命令是这样的:
CLOB 列是 icone,它是一个图像序列化并存储为 String64。我试图在 icone 上只放置“测试”,它插入成功。然后我把想要存储的图像,即这个字符串:
它失败了。
然后用另一个图像测试了他的序列化是:
它有效。
第一个图像序列化字符串不能插入是什么鬼?
我正在使用 Oracle.ManagedDataAccess v4.121.2.0、.NET Framework 4.5.1。和 Windows 7 x64 下的 Oracle 10g。
编辑:所以,我复制第一个图像序列化字符串并打开 PL/SQL 并粘贴到我的 clob 列中,这样就可以了。我知道,这不是解决方案,但我不认为是数据库,所以,可以成为数据提供者吗?
c# - Oracle 托管驱动程序可以正确使用 async/await 吗?
我试图使用 async/await .NET 功能进行 Oracle 查询。结果集非常大,大约需要 5-10 秒才能返回。正在挂起 UI 线程,本质上Window_Loaded
我想使用 async/wait 在后台进行查询,然后用结果更新数据视图。
那么这是 Oracle 驱动程序问题还是代码错误?例如,这里是同步完成而不是异步完成的吗?我正在使用Oracle.ManagedDataAccess
可以从 Oracle 网站获得的最新版本。
我试过这个,它仍然阻止用户界面:
所以最后,我把方法改成了这样,让它不会阻塞。看来我的想法是正确的,只是 Oracle 托管库同步实现了 Async 方法(仅符合接口)。
c# - ODP.Net 托管 API - 字符串 > 1000 个字符的数组绑定
使用ODP.Net托管API时,当使用数组绑定向VARCHAR2(4000)类型的列插入数据,而我们数组中某行值的字符串长度大于1000个字符时,抛出如下异常:
ORA-01461: 只能绑定 LONG 值以插入 LONG 列
我们目前将参数定义为:
我尝试改用它,但仍然遇到同样的问题:
还尝试如下设置 Varchar2 的长度大小,但仍然存在相同的问题。
也试过这个,没有运气:
有任何想法吗?
这似乎是一个类似的问题:https ://community.oracle.com/thread/3649551
更新 我怀疑可能存在某种字符集问题,这使得长度比预期的要长,所以为了排除这种情况,我将我们试图插入数据的表的列长度减少到 VARCHAR2(1000 ),假设这将使最大允许字符长度为 250 - 但情况并非如此。在抛出此异常之前工作的最大值仍然是 1000。
更新 2 我找到了一个可以解决这个问题的 oracle 补丁。我将尝试获取此补丁并进行验证。https://support.oracle.com/epmos/faces/PatchDetail?patchId=20361140&requestId=18735492
更新 3 oracle 补丁没有为我解决这个问题。我尝试遍历所有参数绑定状态,但它们都表示成功。
更新 4 似乎这是 Oracle Managed API 中的一个错误,这是一个可以重现该问题的示例类。
找到解决 方法如果我在参数中将 OracleDbType 从 Varchar2 更改为 NVarchar2 ,它就可以工作。
解决方法 解决方法是在 .net 端的参数中使用 NVARCHAR2 。
odp.net - .Net 3.5 的 Oracle.ManagedDataAccess
问题是:
是否有适用于 .NET 3.5 的 Oracle.ManagedDataAccess 库?
目前应用程序使用.NET 4.0,但我必须创造机会在 .NET 3.5 上使用具有独立 Oracle 库的应用程序。
c# - Oracle 托管驱动程序无法解析 TNS 名称,但存在于跟踪中
我已经使用正确的 TNS_ADMIN 设置(在 .NET 配置文件中)安装并配置了 Oracle.ManagedDataAccess 客户端。当我启用 Oracle 跟踪时,它会正确选择 TNS_ADMIN 设置,甚至列出 TNSNAMES.ORA 中的所有 TNS 条目。我在连接字符串中使用的 TNS 名称存在于跟踪输出中。
但是,当我尝试使用连接字符串中的 TNS 名称进行连接时(在“数据源=...;”部分),它仍然给我 ORA-12154(无法解析连接标识符)。我不确定我做错了什么...... Oracle 托管提供程序识别跟踪中的连接标识符。我还可以对任何问题的连接标识符进行 TNSPING,并且我的 Oracle 托管配置指向 TNSPING 使用的相同 TNSNAMES.ORA。
有任何想法吗?
谢谢!
c# - 托管 ODP.net:更改通知和 ldap
我正在使用 LDAP 解析连接到 Oracle 数据库。
这对于常规查询现在很好用,我可以打开一个连接并对其执行命令。
不幸的是,它不适用于在调用System.DirectoryServices.Protocols.DirectoryOperationException: The object does not exist
时出现异常的更改通知查询。ExecuteNonQuery
C:\Program Files\Oracle\sqlnet.ora
C:\Program Files\Oracle\ldap.ora
网络配置
通知登记
这会引发以下异常:
跟踪(ips已被xs替换)
c# - 这是 Oracle ODP.NET 中的错误吗
我很好奇这是否是 Oracle ODP.NET 提供程序中的错误。我创建了一个参数化的插入语句。我将其中一个参数命名为“:EMPNO”,并在测试时给它一个值“8000”。在数据库中,EMPNO 列被定义为 varchar2(4 字节)。但是,插入给出了错误消息
ORA-12899: 列 "HR"."HR_DEPARTURE"."EMPNO" 的值太大(实际值:6,最大值:4)
这是一些代码片段:
然后我添加一个参数
创建一个命令并添加参数(有多个参数因此数组)
我做了一些研究并考虑了诸如编码之类的事情,以及 Oracle 默认按位置绑定(而不是 BindByName)这一事实。但是,这些都没有解决问题。然后我在黑暗中拍摄并将参数名称更改为“:EMPN”并收到以下错误消息:
ORA-12899: 列 "HR"."HR_DEPARTURE"."EMPNO" 的值太大(实际值:5,最大值:4)
这提示我将参数名称更改为“:EMP”,此时查询有效。我发现提供程序在 c# 中对参数名称强制执行数据库列大小很奇怪。数据库大小应该是值的强制执行('8000' 我在所有测试中都保持不变)。
c# - ODP.NET 托管库可以解析别名,但 32 位库可以
我的盒子上安装了 32 位驱动程序(它们是由一些 DBA 安装和配置的)
我写了一个简单的脚本来测试驱动程序,大致如下
当我使用 32 位 Oracle.DataAccess.dll 将此应用程序编译为 32 位时,它可以顺利执行。
但是,如果我使用 Oracle.ManagedDataAccess.dll 将应用程序编译为 AnyCPU,我会收到 ORA-12154(无法解析指定的连接标识符)错误。
如果我 tnsping 别名,它可以正常工作并告诉我连接标识符和真实数据库名称。
如果我随后更改连接字符串以使用真实的数据库名称而不是别名,然后再次尝试使用托管库,它将顺利执行。
我一直在阅读并发现这个答案说托管驱动程序依赖于 tnsnames.ora 文件来解析别名,但是我依赖于 sqlnet.ora 和 ldap.ora 中定义的 LDAP 服务器。
当我 tnsping 时,它说它使用 sqlnet.ora 来解析名称。
那么托管驱动程序为什么不起作用呢?
c# - Oracle ManagedDataAccess - 连接请求超时 - 池化
我终于承认失败并寻求帮助。我已经尽我所能来解决这个问题,但似乎我无能为力。
我正在使用:VS2010 C# Oracle 12c ODP.Net Managed121012
我继承了一个同时使用托管和非托管数据访问 dll 的应用程序。在我卸载 oracle 之前它一直在工作。然后我为 64 位机器重新安装了 11g 客户端。我马上注意到只安装了框架 2 的数据访问 dll,但我还是继续。然后,我将 client_1 文件夹中的所有 oci 和 ora dll 复制到我的应用程序的 bin 目录中,并将 Oracle.DataAccess.dll 也复制到我的 bin 目录中。我还将 Oracle.ManagedDataAccess.dll 复制到此文件夹中。
只要我没有更改数据集上的任何内容,我的应用程序就会成功运行。我会很乐意继续这样做,除非我必须创建更多数据集。当我尝试添加新数据集时,我的数据源连接向导下拉列表为空白。然后我尝试重新创建连接,但只能看到 .Net Framework DProviders。我看不到托管提供商。在某些时候,我也收到此错误“当前未选择数据提供者”。
认为这是因为未安装托管提供程序我卸载了 11g 客户端并安装了 64 位 12c 客户端并将所有相关文件复制到我的应用程序的 bin 中。我将以下行添加到我的 app.config 文件中:
在此之后,我现在可以看到一些旧数据源,但我无法连接到我的数据库,因为我收到“连接请求超时”。当我手动创建新连接时,我可以与非托管提供程序正常连接,但会收到连接请求超时错误。
我真的在我的绳索尽头,在我使用绳索之前真的很感激新鲜的眼睛。
提前致谢。
.net - .net Web 服务 Oracle 数据库连接问题
我有一个继承的 .net Web 服务(asmx)。一切都很好,直到数据库因维护而停机。一旦发生这种情况,Web 服务将无法连接到 Oracle 11g 数据库,直到应用程序池被回收。Web 服务使用其他应用程序也使用的数据层。我一直在四处寻找可能导致问题的原因。任何类似的建议或经验都会很棒。
谢谢