0

ODP.NET 経由で CLOB データを取得しようとしています。私の問題は、reader.GetValue(i).ToString() が最大 4000 文字しか返すことができず、残りのデータが切り捨てられることです。reader.GetOracleClob(1).Value を使用すると、「指定されたキャストは無効です」というエラーが発生しました。

私が見逃したものは何か分かりますか?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 Doc で、InitialLOBFetchSize プロパティがゼロ以外の値に設定されている場合、GetOracleBlob、GetOracleClob、GetOracleBlobForUpdate、および GetOracleClobForUpdate 型のアクセサー メソッドが無効になることがわかりました。これは、「指定されたキャストが無効です」というエラーが発生した理由を説明するのに役立つ場合があります。

ただし、4000 の制限を超えるデータはまだ取得できません。

ここに記載されているさまざまな組み合わせを試しました http://docs.oracle.com/cd/E11882_01/win.112/e18754/featData.htm#autoId6 しかし、うまくいきません。

4

2 に答える 2