Exemple #1
0
        public IEnumerable <T> Execute <T>(IRequestWithResponse request)
        {
            var rows = new List <Dictionary <string, object> >();

            using (var command = request.BuildSql())
            {
                connection.Connection.Open();
                try
                {
                    OnRequest(command.CommandText);

                    using (var reader = command.ExecuteReader(CommandBehavior.CloseConnection))
                    {
                        while (reader.Read())
                        {
                            var row = new Dictionary <string, object>();

                            for (int i = 0; i < reader.FieldCount; i++)
                            {
                                row.Add(reader.GetName(i), reader.GetValue(i));
                            }

                            rows.Add(row);
                        }
                    }
                }
                catch (Exception e)
                {
                    throw e;
                }
                finally
                {
                    connection.Connection.Close();
                }
            }

            var objects = new List <T>();

            foreach (var row in rows)
            {
                var obj = Activator.CreateInstance <T>();

                foreach (var column in row)
                {
                    var prop = obj.GetType().GetProperty(column.Key);

                    if (prop == null && typeof(T) == typeof(int))
                    {
                        obj = (T)column.Value;
                    }
                    else if (prop.PropertyType == typeof(string))
                    {
                        if (!column.Value.Equals(DBNull.Value))
                        {
                            prop.SetValue(obj, column.Value.ToString());
                        }
                        else
                        {
                            prop.SetValue(obj, null);
                        }
                    }
                    else if (prop.PropertyType == typeof(int))
                    {
                        var tmp = 0;
                        int.TryParse(column.Value.ToString(), out tmp);
                        prop.SetValue(obj, tmp);
                    }
                    else if (prop.PropertyType == typeof(float))
                    {
                        var tmp = 0f;
                        float.TryParse(column.Value.ToString(), out tmp);
                        prop.SetValue(obj, tmp);
                    }
                    else if (prop.PropertyType == typeof(bool))
                    {
                        prop.SetValue(obj, column.Value.ToString().Equals("1"));
                    }
                    else if (prop.PropertyType == typeof(XmlDocument))
                    {
                        var xml = new XmlDocument();

                        if (!column.Value.Equals(DBNull.Value))
                        {
                            xml.LoadXml(column.Value.ToString());
                        }

                        prop.SetValue(obj, xml);
                    }
                    else if (prop.PropertyType == typeof(Guid))
                    {
                        prop.SetValue(obj, Guid.Parse(column.Value.ToString()));
                    }
                    else if (prop.PropertyType == typeof(DateTime))
                    {
                        prop.SetValue(obj, DateTime.Parse(column.Value.ToString()));
                    }
                }

                objects.Add(obj);
            }

            return(objects);
        }
        public static async Task <ServerResponseWithData <TResp> > SendReceive <TResp>(Stream stream, IRequestWithResponse <TResp> request)
        {
            var data = Serializer.Serialize(request);

            await WriteCommandHeader(stream, request.Command, data.Length);
            await WriteBytes(stream, data);

            var cmdHeader = await ReadCommandHeader(stream);

            if (cmdHeader.Command != request.Command)
            {
                return new ServerResponseWithData <TResp> {
                           ErrorMsg = "Wrong command received"
                }
            }
            ;

            if (cmdHeader.PayloadLength == 0)
            {
                return new ServerResponseWithData <TResp> {
                           ErrorMsg = "No data received"
                }
            }
            ;

            var responseBytes = await ReadBytes(stream, cmdHeader.PayloadLength);

            var response = Serializer.Deserialize <ServerResponseWithData <TResp> >(responseBytes);

            return(response);
        }
Exemple #3
0
        public IEnumerable <T> Execute <T>(IRequestWithResponse request)
        {
            var rows = new List <Dictionary <string, object> >();

            using (var command = request.BuildSql())
            {
                connection.Connection.Open();
                try
                {
                    OnRequest(command.CommandText);

                    using (var reader = command.ExecuteReader(CommandBehavior.CloseConnection))
                    {
                        while (reader.Read())
                        {
                            var row = new Dictionary <string, object>();

                            for (int i = 0; i < reader.FieldCount; i++)
                            {
                                row.Add(reader.GetName(i), reader.GetValue(i));
                            }

                            rows.Add(row);
                        }
                    }
                }
                catch (Exception e)
                {
                    throw e;
                }
                finally
                {
                    connection.Connection.Close();
                }
            }

            var objects = new List <T>();

            foreach (var row in rows)
            {
                var obj = Activator.CreateInstance <T>();

                foreach (var column in row)
                {
                    var prop = obj.GetType().GetProperty(column.Key);

                    if (prop == null && typeof(T) == typeof(int))
                    {
                        obj = (T)column.Value;
                    }
                    else
                    {
                        prop.SetValue(obj, (column.Value.Equals(DBNull.Value) ? null : column.Value));
                    }
                }

                objects.Add(obj);
            }

            return(objects);
        }