예제 #1
0
        /// <summary>
        /// Obtiene resultado procedimiento almacenado y se le dan parametros manuales, luego convierte a la clase señalada, siempre en relacion a los campos resultado de la query sean iguales a los del objeto
        /// </summary>
        /// <param name="cmd">string</param>
        /// <param name="_tipoClase">type</param>
        /// <param name="dParameters">dictionary</param>
        /// <returns></returns>
        public static dynamic Obtener_Objeto_Procedimiento(PROCESO_SP _sp, Type _tipoClase, Dictionary <string, object> dParameters)
        {
            try
            {
                string  sp_nombre = dSP[_sp];
                dynamic lista     = Crear_Lista(_tipoClase);
                if (string.IsNullOrEmpty(sp_nombre))
                {
                    throw new Exception();
                }

                using (SqlConnection cnn = Corp.Datos.Conexion.ObtieneConexion("CF"))
                {
                    SqlCommand command = cnn.CreateCommand();
                    command.CommandText = sp_nombre;
                    command.CommandType = CommandType.StoredProcedure;

                    if (dParameters.Count > 0)
                    {
                        dParameters.ToList().ForEach(p => command.Parameters.Add(string.Format("@{0}", p.Key), d_tipo[p.Value.GetType()]).Value = p.Value);
                    }

                    SqlDataReader rdr = command.ExecuteReader();
                    DataTable     dt  = new DataTable();

                    dt.Load(rdr);

                    var           _type_of_data = Activator.CreateInstance(_tipoClase);
                    List <string> l_fields      = Obtener_Fields(_tipoClase);
                    Dictionary <string, FieldInfo> d_field_infos = Obtener_Field_Infos(_tipoClase);
                    dt.AsEnumerable().ToList().ForEach(row =>
                    {
                        dynamic _obj = Crear_Obj(_type_of_data, _tipoClase);
                        l_fields.ForEach(p =>
                        {
                            if (row.Table.Columns.Contains(p))
                            {
                                Type _tipo_campo        = d_field_infos[p].FieldType;
                                var _type_of_data_campo = _tipo_campo != typeof(string) ? Activator.CreateInstance(_tipo_campo) : string.Empty;

                                dynamic field_value = Obtener_Valor_Row(row, p, _tipoClase, _type_of_data_campo);
                                if (field_value != null)
                                {
                                    Setear_Campo(p, _obj, field_value, _tipoClase);
                                }
                            }
                        });
                        lista.Add(_obj);
                    });
                }


                return(lista);
            }
            catch (Exception ex)
            {
                return(null);
            }
        }
예제 #2
0
        public static int Eliminar_Objeto(SqlConnection sqlCon, SqlTransaction sqlTran, PROCESO_SP _sp, DateTime FechaCarga)
        {
            try
            {
                string sp_nombre       = dSP[_sp];
                var    cmd_transaccion = new SqlCommand(sp_nombre, sqlCon, sqlTran)
                {
                    CommandType = System.Data.CommandType.StoredProcedure
                };

                cmd_transaccion.Parameters.Add("@FechaCarga", SqlDbType.DateTime).Value = FechaCarga;

                return(Convert.ToInt32(cmd_transaccion.ExecuteScalar()));
            }
            catch (Exception ex)
            {
                return(-1);
            }
        }
예제 #3
0
        public static string Establecer_Linea_Objeto(dynamic obj, Type _tipoClase, List <string> l_no_considerados, SqlConnection sqlCon, SqlTransaction sqlTran, PROCESO_SP _sp)
        {
            try
            {
                string sp_nombre       = dSP[_sp];
                var    l_fields        = _tipoClase.GetFields().Select(p => p.Name).ToList();
                var    cmd_transaccion = new SqlCommand(sp_nombre, sqlCon, sqlTran)
                {
                    CommandType = System.Data.CommandType.StoredProcedure
                };

                l_fields.Where(p => !l_no_considerados.Contains(p)).ToList().ForEach(p =>
                {
                    cmd_transaccion.Parameters.Add(string.Format("@{0}", p), d_tipo[Obtener_Campo_Type(p, _tipoClase)]).Value = Obtener_Campo(p, obj, _tipoClase);
                });

                return(cmd_transaccion.ExecuteScalar().ToString());
            }
            catch (Exception ex)
            {
                return("-1");
            }
        }