如何检索Oracle Clob超过4000个字符的ODP.NET



我正在尝试通过ODP.NET检索CLOB数据。我的问题是那个读者。GetValue(i).ToString()最多只能返回4000个字符,其余数据将被截断。如果我使用阅读器。GetOracleClob(1)。我得到的值"指定的强制转换无效"错误。

知道我错过了什么吗?我使用的是ODP.NET 4.0

下面是我的代码。

using (OracleConnection oConn = new OracleConnection())
{
  oConn.ConnectionString = pConnstr;
  oConn.Open();
  using (OracleCommand oCmd = new OracleCommand("select varchar_column, clob_column from test", oConn))
  {
    oCmd.InitialLOBFetchSize = -1;
    string key, value, value1;
    var rd = oCmd.ExecuteReader();
    while (rd.Read())
    {
      if (rd.IsDBNull(1)) { value = ""; }
      else
      {
        key = rd.GetValue(0).ToString();
        value = rd.GetValue(1).ToString(); // unable to get more than 4000.
        value1 = rd.GetOracleClob(1).Value; // Specified cast is not valid.
      }
    }
  }
}

我在Oracle文档中发现,当InitialLOBFetchSize属性设置为非零值时,GetOracleBlob、GetOracleClob、GetOracleBlobForUpdate和GetOracleClobForUpdate类型的访问器方法将被禁用。这可能有助于解释为什么我得到"指定的强制转换无效"错误。

然而,我仍然无法获得超过4000限制的数据。

我尝试过这里记录的不同组合http://docs.oracle.com/cd/E11882_01/win.112/e18754/featData.htm#autoId6但运气不好。

实际上,代码工作正常,并获得了它应该获得的数据。我只是没有意识到我的数据是不完整的,乍一看似乎是一个检索问题。很抱歉

以下是好的代码。

using (OracleConnection oConn = new OracleConnection())
{
  oConn.ConnectionString = pConnstr;
  oConn.Open();
  using (OracleCommand oCmd = new OracleCommand("select varchar_column, clob_column from test", oConn))
  {
    oCmd.InitialLOBFetchSize = -1;
    string key, value;
    var rd = oCmd.ExecuteReader();
    while (rd.Read())
    {
      if (rd.IsDBNull(1)) { value = ""; }
      else
      {
        key = rd.GetValue(0).ToString();
        value = rd.GetValue(1).ToString(); 
      }
    }
  }
}

上面的解决方案对我不起作用。原来我的数据不是CLOB或BLOB,而是LONG数据!所以修复只是设置:

oCmd.InitialLONGFetchSize= -1;

代替

oCmd.InitialLOBFetchSize = -1;

如果这种方法也适用于你,请留下评论。

最新更新