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