Search code examples
c#informixoutsystems

Get list/multiset from informix to C#


I'm making a library for connecting an Informix database with a C# extension for use in Outsystems.

So, now I've hit a wall. I need to receive a list/multiset from the db. How can I do that? I'm using the IfxDataReader to receive the data. But I see no method that could work.

Here is how we can send a list/multiset input parameter. But I need to receive it from a result set.

EDIT: Seeing as this was frowned upon by someone I'll provide some code and my try at it to see if you think it's correct (can't test it right now as I don't yet have data on the database... I'll test it in the end):

        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);
        }

Solution

  • LIST, MULTISET and SET are mapped to String. You should be able to use IfxDataReader.GetString() to get the data.