/// <summary>
        /// This method allows us to select a package from database.  We use the NullableTypes to make the correspondance between
        /// nullable int, decimal and double types in database and our own objects
        /// </summary>
        /// <param name="colProductId">id's of package searched</param>
        /// <returns>A package Object if id matches with datas in database, null if not</returns>
        public CollateralProduct SelectCollateralProduct(int colProductId)
        {
            const string sqlText = @"SELECT 
                                             [name]
                                            ,[desc]
                                            ,[deleted]
                                    FROM CollateralProducts 
                                    WHERE id = @id";

            CollateralProduct colProduct = new CollateralProduct();

            using (SqlConnection connection = GetConnection())
                using (OpenCbsCommand cmd = new OpenCbsCommand(sqlText, connection))
                {
                    cmd.AddParam("@id", colProductId);
                    using (OpenCbsReader reader = cmd.ExecuteReader())
                    {
                        if (reader.Empty)
                        {
                            return(null);
                        }
                        reader.Read();
                        colProduct.Id          = colProductId;
                        colProduct.Name        = reader.GetString("name");
                        colProduct.Description = reader.GetString("desc");
                        colProduct.Delete      = reader.GetBool("deleted");
                        reader.Dispose();
                    }
                }

            List <CollateralProperty> properties = new List <CollateralProperty>();
            const string sqlPropertyText         = @"SELECT 
                                                             id
                                                            ,type_id
                                                            ,[name]
                                                            ,[desc]
                                                     FROM CollateralProperties 
                                                     WHERE product_id = @product_id";

            using (SqlConnection connection = GetConnection())
                using (OpenCbsCommand cmd = new OpenCbsCommand(sqlPropertyText, connection))
                {
                    cmd.AddParam("@product_id", colProduct.Id);
                    using (OpenCbsReader reader = cmd.ExecuteReader())
                    {
                        if (reader.Empty)
                        {
                            return(null);
                        }

                        while (reader.Read())
                        {
                            CollateralProperty collateralProperty = new CollateralProperty();
                            collateralProperty.Id   = reader.GetInt("id");
                            collateralProperty.Type = (OCollateralPropertyTypes)Enum.ToObject(typeof(OCollateralPropertyTypes),
                                                                                              reader.GetInt("type_id"));
                            collateralProperty.Name        = reader.GetString("name");
                            collateralProperty.Description = reader.GetString("desc");

                            if (collateralProperty.Type == OCollateralPropertyTypes.Collection)
                            {
                                List <string> propertyList = new List <string>();
                                const string  sqlListText  = @"SELECT [value] 
                                                         FROM CollateralPropertyCollections 
                                                         WHERE property_id = @property_id";
                                using (SqlConnection conn = GetConnection())
                                    using (OpenCbsCommand selectList = new OpenCbsCommand(sqlListText, conn))
                                    {
                                        selectList.AddParam("@property_id", collateralProperty.Id);
                                        using (OpenCbsReader listReader = selectList.ExecuteReader())
                                        {
                                            if (listReader.Empty)
                                            {
                                                return(null);
                                            }

                                            while (listReader.Read())
                                            {
                                                propertyList.Add(listReader.GetString("value"));
                                            }
                                            collateralProperty.Collection = propertyList;
                                        }
                                    }
                            }
                            properties.Add(collateralProperty);
                        }
                        colProduct.Properties = properties;
                    }
                }

            return(colProduct);
        }