我正在尝试通过 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 但没有运气。