使用.NET读取oracle表,一个LONG类型列总是返回空字符串,如何解决?

use*_*498 4 .net c# oracle

我正在从一个表all_tab_columns中读取,有一个"data_default"列,这是一种LONG类型.

如果我使用sqlplus查询oracle服务器,例如"从table_ = testtable'的all_tab_columns中选择data_default",一切都很好.可以返回表"testtable"的每列的正确默认值.

但是如果我使用Oracle.ManagedDataAccess.dll(好吧,我正在使用Spartacus库,而后者又使用Oracle.ManagedDataAccess.dll),对于同一个查询,data_default列总是返回空字符串'',我尝试了其他几个列例如column_name,table_name,owner等,它们都很好.

我的问题是如何调试此类案例?我找不到这个特殊错误的根本原因.任何建议都将受到欢迎.

谢谢.


spartacus从oracle读取的源代码如下,

this.v_con = new OracleManaged.OracleConnection(this.v_connectionstring);
this.v_con.Open();
this.v_cmd = new OracleManaged.OracleCommand(p_sql, this.v_con);
if (this.v_timeout > -1)
    this.v_cmd.CommandTimeout = this.v_timeout;
this.v_reader = this.v_cmd.ExecuteReader();

v_table = new System.Data.DataTable(p_tablename);
for (int i = 0; i < this.v_reader.FieldCount; i++)
    v_table.Columns.Add(this.v_reader.GetName(i), typeof(string));

while (this.v_reader.Read())
{
    v_row = v_table.NewRow();
    for (int i = 0; i < this.v_reader.FieldCount; i++)
        v_row[i] = this.v_reader[i].ToString();
    v_table.Rows.Add(v_row);
}
Run Code Online (Sandbox Code Playgroud)

我试图调试,data_default列的v_reader [i] .ToString()已经为空.好像我没办法解决它?它可能是.dll问题吗?

JSa*_*ota 8

获得长期和长期的数据

ODP.NET在OracleDataReader对象上的Read方法调用期间从数据库中提取和缓存行.从此操作检索的LONG和LONG RAW列数据的数量由InitialLONGFetchSize确定.更多

您可能需要将其设置为InitialLONGFetchSize非零值并使用OracleDataReader的GetOracleString()方法,并使用ToString()将结果转换为.Net字符串.

  • 谢谢.添加了this.v_cmd.InitialLONGFetchSize = 1024; 在创建this.v_cmd之后解决了这个问题. (2认同)