gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-30 00:30:05 24 4
gpt4 key购买 nike

我正在从一个表 all_tab_columns 中读取,有一个“data_default”列,它是一种 LONG 类型。

如果我使用sqlplus查询oracle服务器,比如“select data_default from all_tab_columns where table_name='testtable'”,一切都很好。可以返回表“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);
}

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

最佳答案

Obtaining LONG and LONG RAW Data

ODP.NET fetches and caches rows from the database during the Read method invocations on the OracleDataReader object. The amount of LONG and LONG RAW column data that is retrieved from this operation is determined by InitialLONGFetchSize. More

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

关于c# - 使用.NET读取oracle表,一个LONG类型的列总是返回空字符串,如何解决?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41931808/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com