从 informix 获取 list/multiset 到 C#

Get list/multiset from informix to C#

我正在制作一个库,用于连接 Informix 数据库和 C# 扩展,以便在 Outsystems 中使用。

所以,现在我碰壁了。我需要从数据库接收 list/multiset。我怎样才能做到这一点?我正在使用 IfxDataReader 接收数据。但是我看不到任何可行的方法。

Here 是我们发送 list/multiset 输入参数的方式。但我需要从结果集中接收它。

编辑:鉴于有人对此不以为然,我将提供一些代码并尝试一下,看看您是否认为它是正确的(现在无法测试,因为我还没有数据)数据库...我最后测试一下):

        ssBensAndFotos = new RLBensAndFotos_BemRecordList();

        DatabaseConnection dc = new DatabaseConnection(ssDatabase, ssHost, ssServer, ssService, ssProtocol, ssUserID, ssPassword);

        try
        {
            dc.Conn = new IfxConnection(dc.ConnectionString);
            dc.Cmd = new IfxCommand("get_bens_and_fotos_by_id_diligencia", dc.Conn);
            dc.Cmd.CommandType = CommandType.StoredProcedure;

            dc.Cmd.Parameters.Add(new IfxParameter("pi_id_diligencia", IfxType.Integer) { Direction = ParameterDirection.Input, Value = sspi_id_diligencia });

            dc.Conn.Open();

            using (IfxDataReader reader = dc.Cmd.ExecuteReader())
                if (reader.HasRows)
                    while (reader.Read())
                    {
                        var bensAndFotos = new STBensAndFotos_BemStructure()
                        {
                            ssid_bem = reader.GetInt32(0),
                            ssnumero = reader.GetInt32(1),
                            ssespecie = reader.GetString(2),
                            ssbem = reader.GetString(3),
                            ssvalor = reader.GetDecimal(4),
                            sscomum = reader.GetInt32(5),
                            ssvoice_record = AuxiliaryMethods.CreateByteArrayFromIfxBlob(reader.GetIfxBlob(6))
                        };
                       // Here I get the string, split it and check to see which members of the array are integers, since in this case I'll be getting a multiset of int's
                        var multisetString = reader.GetString(7).Split('\'');
                        int n;
                        foreach (var item in multisetString)
                            if (int.TryParse(item, out n))
                                bensAndFotos.ssfotos.Add(new STBensAndFotos_FotoStructure() { ssfoto = n });

                        ssBensAndFotos.Add(bensAndFotos);
                    }

            dc.Conn.Close();
        }
        catch (Exception ex)
        {
            throw new Exception(ex.Message);
        }

LIST、MULTISET 和 SET 映射到字符串。您应该能够使用 IfxDataReader.GetString() 来获取数据。