【问题标题】:Obtain column information of result set returned via a ref cursor parameter获取通过引用游标参数返回的结果集的列信息
【发布时间】:2012-02-03 17:09:39
【问题描述】:

我在 Oracle 中有一个存储过程,它通过“SYS_REFCURSOR”类型的 OUT 参数返回结果集。

我需要通过 ADO.NET 获取这个结果集的列信息。我通过创建参数(OracleParameter.OracleDbType = OracleDbType.ReCursor 等)并调用“OracleCommand.ExecuteReader”(CommandBehavior.SchemaOnly)来执行存储过程。然后,我在结果读取器上调用“reader.GetSchemaTable”,以获取描述结果集架构的 DataTable。

OracleCommand command = oracleConnection.CreateCommand();
command.CommandText = "ProcedureName";
command.CommandType = System.Data.CommandType.StoredProcedure;

OracleParameter refParameter = command.CreateParameter();
refParameter.Name = "refCursorParam";
refParameter.Direction = System.Data.ParameterDirection.Output;
refParameter.OracleDbType = OracleDbType.ReCursor;
command.Parameters.Add(dbParameter);

var reader = command.ExecuteReader(System.Data.CommandBehavior.SchemaOnly);
var dataTable = reader.GetSchemaTable();

我的问题是结果集每一列的信息都不完整。我没有关于列的 oracle 数据类型的信息(我确实得到了列名、可空性、长度等)。我得到的唯一类型信息是该列可以映射到的 CLR 类型。

我做错了什么还是有更好的方法来获取通过 OUT 引用游标返回的结果集的列信息?

【问题讨论】:

    标签: c# oracle stored-procedures ado.net sys-refcursor


    【解决方案1】:

    好的,我设法找到了解决方案。 结果集中的每一列都由 reader.GetSchemaTable() 返回的 DataTable 中的 DataRow 表示。此行中的一列是“ProviderType”。此列的值为indicator of the column's data type。此列中的值需要与调用 DbConnection.GetSchema("DataTypes") 返回的表一起使用。 “DataTypes”集合具有“ProviderType->sql 类型”的映射。

    对于 SQL 服务器,有一个附加列“DataTypeName”,它为结果集中的列提供 sql 类型,但对于 Oracle,您需要额外调用 connection.GetSchema("DataTypes") 并设置字典providertype->sqltype,然后获取结果集中每一列的sql类型。

    【讨论】:

      猜你喜欢
      • 2015-11-13
      • 2012-05-15
      • 1970-01-01
      • 1970-01-01
      • 2010-11-09
      • 1970-01-01
      • 2018-09-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多