如何将Oracle.ManagedDataAccess.Types.OracleString []转换为System.String []

时间:2018-04-20 13:50:58

标签: c# oracle stored-procedures casting

我正在使用带有输出参数的c#的Oracle过程,我正在创建这种方式:

            commandUpdate.Parameters.Add(new OracleParameter
            {
                Direction = ParameterDirection.Output,
                ParameterName = "NAME",
                OracleDbType = OracleDbType.Varchar2,
                CollectionType = OracleCollectionType.PLSQLAssociativeArray,


            });
            commandUpdate.Parameters["NAME"].Size = Size;
            commandUpdate.Parameters["NAME"].ArrayBindSize = new int[Size];
            for (int i = 0; i < Size; i++)
            {
                commandUpdate.Parameters["NAME"].ArrayBindSize[i] = 30;
            }

然后,在调用commandUpdate.ExecuteNonQuery()之后我试图将它转换为字符串数组:

string[] names = (string[])(commandUpdate.Parameters["NAME"].Value);

这给我带来了错误System.InvalidCastException

我试图以某种方式使用ToString(),但似乎它对数组不起作用。

那么如何将此结果转换为字符串数组呢?

2 个答案:

答案 0 :(得分:0)

尝试创建一个OracleString变量,该变量将是一个从数组中一次保存一个元素的变量。假设此变量将被称为oraStringVar

通过以下方式为其指定值:

oraStringVar = someListVar[index].Value;

然后,您可以通过执行以下内容来提取所需内容:

string container = oraStringVar.Value

注意Value的双倍使用。同样适用于将clob提取为字符串。

答案 1 :(得分:0)

以下是解决方案:

OracleString[] namesOra = (OracleString[])(commandUpdate.Parameters["NAME"].Value);
names = namesOra.Select(os => os.IsNull ? null : os.Value).ToArray();