问题标签 [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 投票
2 回答
1009 浏览

asp.net - 使用 system.data.oracleclient 构建良好的搜索查询

我正在一个类中构建一个搜索功能,供我们的几个 asp 页面使用。这个想法很简单,从用户那里获取一个搜索词并在数据库中查询该项目。目前我这样做的方式是错误的,这很容易受到 SQL 注入攻击(如果出现问题,ELMAH会在那里挽救一天):

字符串连接不好。接下来你知道,Bobby Tables破坏了我的系统。现在,执行此操作的正确方法是通过将 :searchterm 放入字符串并添加以下行来创建适当的 oracle 变量:

问题是因为我使用的是 like 语句,我需要能够在搜索词的任何一侧都有 %,而我似乎无法使用 '%:searchterm%' 来做到这一点,它只会给出一个错误ORA-01036: 非法变量名称/编号。

我可以参数化但仍然让我灵活的 like 语句成为它的一部分吗?

0 投票
7 回答
14034 浏览

.net - 对于 ODP.NET,有没有办法强制 OracleCommand.BindByName 默认为真?

由于System.Data.OracleClient库已被弃用,我们正在迁移我们的代码库以改用Oracle Data Provider for .NET (ODP.NET)。我们遇到的问题之一是 System.Data.OracleClient 使用参数名称绑定而不是按位置绑定,并且所有代码都直接访问System.Data.OracleClient.OracleCommand而不是使用中间数据层。

由于有相当多的代码,是否有一种简单的方法可以强制 ODP.NET OracleCommand.BindByName 默认为真,或者我们必须在每次使用它时都通过并设置该值?失败了,有没有一种简单的方法可以在 Visual Studio 2008 中插入那行代码?

0 投票
2 回答
1886 浏览

vb.net - 帮助使用 VB.NET 优化 Oracle 中的批量插入

我一次插入一个包含 5000 条记录的块,一个块紧接着另一个块。这些命令在单独的 DLL 中创建,可以调用 4 个不同存储过程中的任何一个。是否有可能加快此速度的批量插入方法。目前,每条记录大约需要 1.5 MS,并且希望将其降低到大约 0.7 MS。

谢谢,

戴夫

0 投票
1 回答
2265 浏览

.net - 如何使用 System.Data.OracleClient 将大型 Blob 插入 Oracle 10G?

尝试将 315K Gif 文件插入 Oracle 10g 数据库。每次我在运行存储过程时收到此错误“ora-01460:未实现或不合理的转换请求”。如果我使用存储过程,似乎有 32K 的限制。我在网上读到,如果您进行直接插入,这不适用,但我不知道如何为字节数组创建插入字符串。这是一个运行在服务器上的胖客户端,所以不用担心 SQL 注入攻击。

任何帮助将不胜感激。仅供参考,vb.net 中的代码。

谢谢,

戴夫

0 投票
4 回答
21870 浏览

c# - 使用大 CLOB 从 C# 调用存储过程的问题

我不是第一个遇到这些问题的人,我会在下面列出一些参考帖子,但我仍在寻找合适的解决方案。

我需要从 C# Web 服务调用存储过程(Oracle 10g 数据库)。Web 服务器安装了 Oracle 9i 客户端,我正在使用 Microsofts System.Data.OracleClient

该过程将 XML 作为 CLOB。当XML 超过 4000 字节时(这可能在正常用例中),我偶然发现了以下错误:

ORA-01460 - 请求的转换未实现或不合理

我找到了这个这个这个帖子。

此外,我发现了一个有前途的解决方法,它不直接从 C# 调用存储过程,而是定义了一段匿名 PL/SQL 代码。此代码作为 OracleCommand 运行。XML 嵌入为字符串文字,过程调用是在该代码段中完成的:

不幸的是,一旦XML 超过 32 KB左右,这种方法就会失败,这在我的应用程序中仍然很可能。这次错误源于 PL/SQL 编译器,它说:

ORA-06550:第 1 行,第 87 列:PLS-00172:字符串文字太长

经过一些研究,我得出结论,用我的第二种方法解决问题根本不可行。

在上述帖子之后,我有以下两个选择。

第一篇文章说有些客户端有问题,但我的(9i)不在上述的 10g/11g 版本范围内。)

你能确认这是仅剩的两个选项吗?或者有其他方法可以帮助我吗?

澄清一下:XML最终不会保存在任何表中,而是由存储过程处理,该存储过程根据 XML 内容在某个表中插入一些记录。

我对这两个选项的考虑:

  • 切换到 ODP.NET 很困难,因为我必须将它安装在到目前为止我没有系统访问权限的 Web 服务器上,而且因为我们可能还想在客户端上部署这段代码,所以每个客户端都必须在部署过程中安装 ODP.NET。
  • 绕行表使客户端代码更加复杂,并且在数据库适应/扩展 PL/SQL 例程上也需要付出相当多的努力。
0 投票
2 回答
1884 浏览

c# - ORA-06550,PLS-00306;向 Oracle 过程插入数据时出错

我已尝试解决此问题,但无济于事。将大量数据插入包含过程“INSCRAPP”的 Oracle 包时出现错误。错误信息是,

ORA-06550:第 1 行,第 7 列:PLS-00306:调用“INSCRAPP”时参数的数量或类型错误 ORA-06550:第 1 行,第 7 列:PL/SQL:语句被忽略

C# 代码很大,但我提供了我传递的参数,

Oracle 过程中的参数是,

请帮忙,因为我无法弄清楚问题是什么,因为我似乎没有在我的 C# 代码中设置正确的数据类型,尽管我希望 OracleType.VarChar 可以很好地映射到 Oracle 中的 VARCHAR2。

期待中的感谢。

0 投票
2 回答
24580 浏览

windows-7 - 如何告诉 System.Data.OracleClient 使用 64 位 Oracle 驱动程序

我正在尝试运行System.Data.OracleClient在 Win7 x64 工作站上使用的 .NET 应用程序。工作站安装了 32 位 Oracle 客户端,导致以下错误消息:

尝试加载 Oracle 客户端库会引发 BadImageFormatException。在安装了 32 位 Oracle 客户端组件的 64 位模式下运行时会出现此问题。

所以这是我漫长的尝试和失败之旅:

  1. 我尝试安装 Oracle 客户端win64_11gR2_client。但是在设置过程中它崩溃了,没有任何评论。
  2. 我遵循来自不同 SO 线程的答案,尝试并提取了instantclient-basic-windows.x64-11.2.0.2.0,并将包含二进制文件的文件夹放在 windows PATH 变量中。我仍然收到相同的错误消息(即使在重新启动后)。
  3. 我按照这个答案的“替代方式”,将文件oci.dll、orannzsbb11.dlloraociei11.dll 复制到我的网站项目的 bin/ 文件夹中。仍然是相同的错误消息。
  4. 我尝试将所有文​​件从即时客户端复制到该目录并再次尝试,但没有成功。
  5. 我安装了ODAC112021Xcopy_x64.zip并将安装文件夹和 bin 文件夹放在 windows PATH 变量中。没有成功。
  6. 我把希望寄托在这个答案上,并查看了注册表中的DllPath(实际上应该与 ODP.NET 相关,而不是System.Data.OracleClient),发现 DllPath 指向正确的 x64 安装的 ODAC,所以,如果我的应用程序不是using System.Data.OracleClient,它应该可以工作,b 但由于它确实使用了它,它仍然失败。
  7. 我用谷歌搜索和stackoverflew,但没有找到我已经提到的帖子的任何其他内容。
  8. 我精心设计了这个 SO 问题,希望能从有见识的 SO 用户那里得到任何有见地的建议。
  9. 从 b_levitt 得到第一个答案后,我尝试在 Global.asax 中添加以下行Application_Start

    C:\OracleProducts\Odac-11.2.0.2.1-x64 是我安装 ODAC 64 位 xcopy 版本的位置。也没有成功。

在相关的说明中,我什至试图强制我的 .NET 应用程序进入 32 位模式但没有成功,但这是另一回事。我需要一个具有前瞻性的解决方案,这意味着 64 位。

0 投票
3 回答
31147 浏览

asp.net - ORA-12571: TNS: ASP.NET 的数据包写入器失败

我的开发团队在ORA-12571: TNS:packet writer failure针对 Oracle 11g 使用 ASP.NET 3.5 和 4.0 时遇到了许多错误。这些错误发生的时间并不一致,并且是由许多应用程序生成的。调用随机存储过程、数据包和内联 SQL 语句时会发生此异常。Oracle 11 客户端安装在 Web 服务器上。有些应用程序使用 Microsoft System.Data.OracleClient 连接到 Oracle,有些应用程序使用 oracle 提供的 .NET 组件(ODP.NET)。两个数据访问对象都出现相同的错误。

还有其他非 .NET 应用程序在不同的 Web 服务器上运行,但使用相同的数据库服务器。这些应用程序没有任何此类问题。我最初的想法是使用 Oracle 客户端在 Web 服务器上配置不正确。

有没有其他人收到这个错误?你做了什么来修复它?

堆栈跟踪:

0 投票
1 回答
209 浏览

visual-studio-2008 - VS2008 中的 SSRS OracleClient 错误

我已经四处寻找这个问题的答案,但到目前为止还没有找到适合我的东西。

我试图在 VS2008 的 SSRS 报告中连接到 Oracle 数据库,但总是出现以下错误:

System.Data.OracleClient 需要 Oracle 客户端软件版本 8.1.7 或更高版本

我猜这是一个配置问题(我的系统上安装了 11g 客户端的东西),但我似乎无法弄清楚。连接字符串似乎也是正确的,因为它在其他机器上也能正常工作。

0 投票
1 回答
1137 浏览

oracle - 如何替换使用现在过时的 System.Data.OracleClient 命名空间类的代码?

我制作了一个“通用”程序,可以将数据从一个数据库转换到另一个数据库。它使用配置文件来定义转换。它使用这样的代码:

上面的 GetConnectionClassTypeByDatabaseType 方法根据配置文件返回类似“System.Data.OracleClient”的字符串。

DO STUFF 部分调用如下方法(其中有很多)来从模式中找出数据库表列属性。这是需要的,因为 Oracle、SQL Server 等以不同方式处理这些问题。

那么当构建说这些类已经过时时,现在应该如何解决这个问题呢?当我这样做时,这应该是一种教科书解决方案(Pro C# 2008 和 .NET 3.5 平台)。现在我很困惑。

在此先感谢并致以最诚挚的问候-马蒂