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

vb.net - ODP.NET 代码示例评论或最佳实践

我目前在 Vb.Net 中有一个数据访问层。我对 ExecuteQuery(作为 DataSet)和 ExecuteNonQuery 函数的实现不太满意。有人有我能看到的任何代码吗?我的代码看起来不干净。对此的任何想法或批评也将不胜感激。

0 投票
2 回答
12932 浏览

c# - c#从Oracle存储过程返回结果集并填充一个DataTable

我是Oracle 编程的ac#SQL Server 开发人员。下面的代码用于将 cmdText 设置为:“select * from myTable”。我现在想把它放在一个存储过程中,我需要有关如何编写这个 Oracle 存储过程并将结果放入我的 c# 代码中的 DataTable 的帮助。谢谢。代码:

注意:connectionString、providerInvariantName 是之前在代码中设置的。

此外,任何关于重构我的代码的建议都值得赞赏,这是我为支持 ODP.net 以及现场需要的与 Oracle 的 ODBC 连接而采取的方法。

更新

我可以使用:

但是,我似乎无法获得使用DbParameter 或 IDataParameter工作的通用解决方案我如何做到这一点以支持 ODBC 和 ODP.net

0 投票
2 回答
20813 浏览

oracle - 在 WiX 中,我如何测试 Oracle ODP.Net 是否存在注册表项(不是值)

更具体地说,我想测试是否在机器上安装了 Oracle ODP.Net。我想通过测试 HKLM\SOFTWARE\ORACLE\ODP.NET 注册表项来做到这一点。

ODP.Net 使用的实际值存储在 HKLM\SOFTWARE\ORACLE\ODP.NET\2.111.6.20 但是我假设这个较低级别键的名称会随着 Oracle 发布更新而改变。

我尝试了以下失败,可能是因为(默认)值并不真正存在,或者可能是因为它为空(我不确定它在注册表中的确切表示方式)。

因此,以下任何一项都会对我有所帮助:

  • 一种搜索注册表项下没有值的方法。
  • 一种使用包含通配符的路径搜索注册表值的方法
  • 测试安装 ODP.Net 的更好方法
0 投票
1 回答
11949 浏览

c# - 时间:2019-06-01 标签:c#datatypes->oracledatatypes

我喜欢在 Oracle 数据库中保存不同的 c# 数据类型(int、decimal、double、string、Guid 等)。有没有人有一张表来显示要使用的 oracle 数据类型?

我发现表格显示了用于不同 oracle 数据类型的 c# 数据类型,但反之则不然。

0 投票
1 回答
4670 浏览

c# - 从 C# 调用 oracle 函数

我有一个 Oracle 函数 GetEmployeeDetails,它将所有员工详细信息保存到临时表 TempEmployeeDetails 表中。

我必须调用该函数,然后对临时表进行选择查询。函数调用成功,但选择查询抛出以下错误。

"开始:输出:= MyPackage.GetEmployeeDetails(" + ":EmployeeId,"); 选择 * 从 TempEmployeeDetails; 结尾;”

上面的查询给了我这个错误:

ORA-06550:第 1 行,第 98 列:

PLS-00428:此 SELECT 语句中应有一个 INTO 子句

0 投票
3 回答
681 浏览

vb.net - 请帮助防止此 ODP.NET 代码和事务的数据层重构

我正在使用带有 ODP.NET 的 Oracle 11g 客户端。我正在尝试添加条件事务处理。

如何修复 txn 为空/空?错误是:变量“txn”在被赋值之前被使用。运行时可能会导致空引用异常。链接或指向解决方案的指针也将不胜感激。

编辑: 感谢 RichardOD 指出您不能明确声明不能通过 ODP.NET 在存储过程上打开事务。我已经验证这是一个问题。但是我们仍然没有弄清楚为什么会发生错误。我知道 txn 最初在 if 语句中被赋予了一个值,但是在 try/catch 块之外定义应该使这无关紧要......对吗?还是编码不好?

0 投票
3 回答
11068 浏览

c# - 如何在不使用 OracleObjectMappingAttribute 的情况下使用 ODP.NET 从 Oracle UDT 进行映射?

我们应用程序中的数据访问层将使用 Oracle 的 UDT 功能。我们只会将 UDT 对象传入和传出数据库。

目前,我们使用 ODP.NET 提供的函数生成自定义类(它创建了一个看起来非常可怕的类,我们真的不希望在我们的代码库中使用它)。

然后我们使用一个单独的映射类,将自定义类映射到我们的一个业务对象(并在保存时返回)。

我正在努力寻找更好的方法来做到这一点。

我想我会放弃生成的类,只写一个实现 IOracleCustomType 的映射类。From/ToCustomObject 方法然后会从我的 UDT 映射到我的业务对象。但是,当我尝试它时,这给我带来了问题 - 我收到错误“对象属性未映射到自定义类型成员”。看来,除了这两种方法外,我的映射类中还需要属性 - UDT 中的每个项目都有一个属性。

例如 - 一个工作流 UDT 包含三个项目 - 一个状态、创建时间和创建者。我的 UDT 又好又简单:

正如我希望它最终出现的业务对象一样:

我想从一个到另一个,而不必将 Oracle 代码添加到业务对象。

所以我的想法是创建一个这样的映射类:

但这不起作用,因为需要 OracleObjectMappingAttribute 来映射每个属性(如在 ODP.NET 生成的类中)。这看起来真的很愚蠢,因为我根本不会使用它们。事实上,我可以让我的映射类工作,只需添加三行:

肯定有比进行如此可怕的黑客攻击更好的方法吗?毕竟,这些变量根本不会被使用——ODP.NET 似乎只是需要它们来获取要映射到的类型——但我认为这可以通过不同的方式实现。想法?

0 投票
5 回答
5099 浏览

oracle - 无法通过 ODP.NET 执行 SQL 查询 - 无效字符错误

我正在尝试通过 ODP.NET 执行 SQL 查询以创建表,但我总是收到 ORA-00911 'invalid character' 错误。异常中的 Errors 对象始终具有文本“ORA-00911: invalid character\n”,即使 SQL 查询本身没有换行符。

我正在执行 SQL 的代码是这样的:

queryString 包含一个 CREATE TABLE 语句,通过 SQL Developer 执行时可以正常工作

编辑:我正在执行的 SQL 是这样的:

删除了换行符

0 投票
1 回答
2916 浏览

.net - Oracle.DataAccess.Client.OracleDataReader (ODP.Net) 是否实现 IDataReader 接口?

我是 ODP.Net 的新手,并试图将其实施到我们现有的系统中。目前,我们正在使用 OLEDB 并使用 IDataReader 接口从 DataReader 读取记录。但是,当我们使用相同的代码逻辑使用 ODP.Net 时,没有选择记录。所以,我的问题是,Oracle.DataAccess.Client.OracleDataReader (ODP.Net) 是否实现了 IDataReader 接口?如果我尝试使用 OracleDataReader 读取记录而不使用 IDataReader 选择的记录。

我正在使用 ODP.Net 10.1.0.4、Oracle 客户端 10g、ASP.Net

编辑:

以上是我们现在使用的代码。它与 OLEDB、SQLClient 完美配合。将此代码与 ODP.Net 一起使用时,不知何故没有记录返回。

当更改为此时,我们设法选择记录

我们无法将其更改为上述代码,因为它将涉及 300 多个数据文件类,我们希望此代码适用于其他数据库。有什么帮助吗?

0 投票
3 回答
4803 浏览

sql - 将 Timestamp 类型的关联数组传递给 oracle 存储过程

我们在使用 Oracle Odp.Net(连接到 Oracle 9)时遇到了一个奇怪的错误。下面的代码片段说明了这个问题。

这是我们遇到的错误:

ORA-00600: 内部错误代码, 参数: [15419], [PL/SQL 执行期间出现严重错误], [], [], [], [], [], []

ORA-06544: PL/SQL: 内部错误, 参数: [78502], [], [], [], [], [], [], []

ORA-06553: PLS-801: 内部错误 [78502]

谷歌搜索让我们怀疑(尽管我们不完全确定)Odp.Net 不支持传递时间戳数组。

所以问题是2倍的:

  • 是否可以使用 odp.net 将时间戳数组传递给 pl/sql 过程?
  • 如果没有,是否有一个好的解决方法?

说明问题的 C# 控制台程序:

该代码正在调用以下 PL/SQL 存储过程