【发布时间】:2011-05-27 02:35:23
【问题描述】:
我的查询似乎从 OleDbDataReader 返回了错误的数据。我在下面包含了实际代码(用户 ID 和密码已更改)。我在 Oracle Express 10g 上运行。
如果我在 Toad 的 Oracle Web 管理实用程序中运行下面的 SQL,或者如果我将下面的代码更改为 OracleConnection,则返回的所有 4 条记录在“answer_text”列中都有值。
然而,从 OleDbDataReader 中,此代码在第二条记录上引发异常,它为“answer_text”返回 null 而不是预期值:“这是第二条开放式评论。现在事情真的变得疯狂了。”
相关字段在数据库中定义为 CLOB。
所以我的问题是,OraOLEDB 提供商是否完全不可靠?这真的是很不靠谱的行为。 4 条记录中有 3 条正确返回数据。只需使用 OleDbConnection 更改 OracleConnection 并从连接字符串中删除“Provider”似乎可以正常工作。
不过,出于分发/支持的原因,我认为我的客户不想这样做。 Oracle 只是我们支持的 4 家数据库供应商中的 1 家,此代码适用于其他供应商。
这是一个已知的错误吗?我缺少一些神秘的设置吗?我在 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");
}
【问题讨论】:
-
驱动程序本身不会抛出任何类型的错误。他们只是在应该返回数据时返回 null。因此,在上面的示例中,您会收到一条异常消息:“这不应该发生”。