c# - .NET 中的 OraOLEDB 提供程序在 CLOB 字段上是否不可靠?

标签 c# .net oracle

我有一个查询似乎从 OleDbDataReader 返回了错误的数据。我在下面包含了实际代码(用户 ID 和密码已更改)。我在 Oracle Express 10g 上运行。

如果我在 Oracle Web Admin Utility 中从 Toad 运行下面的 SQL,或者如果我将下面的代码更改为 OracleConnection,则返回的所有 4 条记录在“answer_text”列中都有值。

然而,在 OleDbDataReader 中,此代码在第二条记录上引发异常,它为“answer_text”返回 null 而不是预期值:“这是第二条开放式评论。现在事情真的变得很疯狂。”

有问题的字段在数据库中定义为 CLOB。

所以我的问题是,OraOLEDB 提供程序是否完全不可靠?这确实是参差不齐的行为。 4 条记录中的 3 条正确返回数据。只需将 OracleConnection 更改为 OleDbConnection 并从连接字符串中删除“Provider”似乎就可以正常工作。

不过,出于分发/支持的原因,我认为我的客户不想这样做。 Oracle 只是我们支持的 4 家数据库供应商之一,此代码适用于其余供应商。

这是一个已知错误吗?我缺少一些神秘的设置吗?我对 Oracle 没有太多经验,而且我无法从谷歌搜索这个问题中找到任何东西。任何建议将不胜感激。

        var connection = new OleDbConnection("Provider=OraOLEDB.Oracle;Data Source=localhost;User Id=x;Password=x;");
        connection.Open();
        var command = connection.CreateCommand();
        command.CommandText = "select response_id, item_id, subitem_id, answer_id, answer_text, other_text, column_answer_id from sur_response_answer where item_id in (180, 181)";
        var reader = command.ExecuteReader();
        while (reader.Read())
        {
            if (reader.IsDBNull(reader.GetOrdinal("answer_text")))
                throw new Exception("This should not be happening");
        }

最佳答案

Oracle 支持有错误 9866728,但这适用于 OLEDB 提供程序 11.2.0.1。它已在文档 1272856.1 中列出的补丁中得到修复。要访问这些文档和补丁,您需要一个 Oracle 支持帐户。

关于 Oracle Express 10g,众所周知,它是一个不受支持的版本(从未发布过补丁),并且存在一些已知错误 - 我不会将它用于生产应用程序。加入 Oracle 合作伙伴网络将允许您使用开发/测试许可针对实际版本进行开发和测试,而不是过时的(尽管是免费的...)版本。

关于c# - .NET 中的 OraOLEDB 提供程序在 CLOB 字段上是否不可靠?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6147274/

相关文章:

oracle - ORA-06504 : PL/SQL: Return types of Result Set variables while execution

sql - 在 Oracle (PL/SQL) 中执行动态 SQL 并确保安全性

c# - string.Join 的行为

c# - 获取 Azure Blob 存储中的图像

c# - DbContext 损坏附加实体 : why?

c# - 为 getter 和 setter 使用支持变量

c# - 鼠标倾斜水平滚动在 DataGridView 中不起作用

oracle - 如何使用 dbExpress 以 SYSDBA 身份连接到 Oracle 数据库?

c# - 为多语言 umbraco 站点复制内容

c# - ASP.NET MVC 2 C# : Short hand IF within loop?