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 しかし、うまくいきません。