locked
Traer datos de una base de datos para consulta general RRS feed

  • Pregunta

  • Buenos días amigos!

    Espero me pueda apoyar con el siguiente problema en MVC C#

    Requiero traer los datos en un Grid de mi base de datos que tengo como procedimiento almacenado..

    cuando ejecuto en paso de parametros F10...

    El controlador pasa a la clase CRUDColonia y la Clase CRUDColonia regresa al controlador y el controlador a la vista 

    pero nunca la clase CRUDColonia pasa por la Clase Colonia por lo tanto siempre me trae datos nullos..

    Que puedo hacer para que el CRUDColonia traiga los datos que estan en la clase colonia?

    Utilizo SQLServer 2014 y VS2019 MVC C#

    Gracias de antemano!

    Tengo mi modelo:

     public class ModelColonia
        {
    
            public int Id_colonia { get; set; }
            public string Colonia { get; set; }
    
            public object Error_col { get; set; }
    
            
        }


    Este es mi Namespace Datos y mi class se llama Colonia

     public List<Models.ModelColonia> Obtener(List<SqlParameter> filtros = null)
            {
                list = new List<Models.ModelColonia>();
    
                using (oCon = new SqlServer())
                {
    
                    if (filtros != null)
    
                        foreach (SqlParameter p in filtros)
                        {
                            oCon.addParameter(p);
                        }
                    try
                    {
                        using (System.Data.SqlClient.SqlDataReader drInfo = oCon.executeReader("dbo.proc_get" + this.GetType().Name))
                        {
                            while (drInfo.Read())
                            {
                                obj = new Models.ModelColonia()
                                {
    
                                    Id_colonia = Convert.ToInt32(drInfo["id_colonia"]),
                                    Colonia = (drInfo["colonia"]).ToString()
                                   
                                };
    
                                list.Add(obj);
                            }
                        }
                    }
                    catch (SqlException ex)
                    {
                        _errorMensaje = ex.Message.ToString();
                    }
    
                }

    A continuacion tengo la class CRUDColonia

     private int totalRegistros = 0;


            public List<ModelColonia> GetObtener(Int32? idcol, String nombre, int maximumRows, int startRowIndex)
            {
                Datos.Colonia obj = new Datos.Colonia();
                List<ModelColonia> listaObjs = new List<ModelColonia>();
                List<System.Data.SqlClient.SqlParameter> campos = new List<System.Data.SqlClient.SqlParameter>();
                campos.Add(new System.Data.SqlClient.SqlParameter("@id_colonia", idcol));
                campos.Add(new System.Data.SqlClient.SqlParameter("@colonia", nombre));

                listaObjs = obj.Obtener(campos);
                totalRegistros = listaObjs.Count();

                return listaObjs;
            }

    posteriormente tengo el controlador

    namespace SistemaMc.Controllers { public class ColoniaController : Controller { // GET: Colonia public ActionResult Obtener () { CRUDColonia Colobt  = new CRUDColonia();
                ModelState.Clear();
                return View(Colobt.GetObtener(null, null, 0,0));
    }

    }

    }

    La vista:

    @model IEnumerable<SistemaMc.Models.ModelColonia>
    
    @{
        ViewBag.Title = "Obtener";
       // Layout = "~/Views/Colonia.cshtml";
    }
    
    <h2>Obtener</h2>
    
    <p>
        @Html.ActionLink("Add New Employee", "AddEmployee")
    </p>
    
    <table class="table">
        <tr>
    
            <th>
                @Html.DisplayNameFor(model => model.Id_colonia)
            </th>
            <th>
                @Html.DisplayNameFor(model => model.Colonia)
            </th>
            <th></th>
        </tr>
    
        @foreach (var item in Model)
        {
            @Html.HiddenFor(model => item.Id_colonia)
            <tr>
    
                <td>
                    @Html.DisplayFor(modelItem => item.Colonia)
                </td>
              
                <td>
                    @Html.ActionLink("Edit", "EditEmpDetails", new { id = item.Id_colonia }) |
                    @Html.ActionLink("Delete", "DeleteEmp", new { id = item.Colonia }, new { onclick = "return confirm('Are sure wants to delete?');" })
                </td>
            </tr>
    
    
    
        }
    </table>  






    • Editado mmarquez04 lunes, 4 de mayo de 2020 21:14
    lunes, 4 de mayo de 2020 19:53

Todas las respuestas

  • hola

    estas seguro que no esta ingresando, o en realidad lo hace pero como tiene un catchen donde solo asignas el error a una variable pero no hace nada

    catch (SqlException ex)
    {
         _errorMensaje = ex.Message.ToString();
    }

    quizas esta saliando sin datos

    porque no pones un breakpoint en ese catch a ver sino esta ingresando con un error

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina


    lunes, 4 de mayo de 2020 21:46
  • porque le unes el name del del type aqui

    oCon.executeReader("dbo.proc_get" + this.GetType().Name)

    para armar el nombre del procedure, eso esta muuuyy raro

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    lunes, 4 de mayo de 2020 21:48
  • Gracias Master..Este es el error que me genera en

    catch (SqlException ex)
    {
         _errorMensaje = ex.Message.ToString();
    }

    {"La función o el procedimiento proc_getCOLONIA tiene demasiados argumentos."}


    • Editado mmarquez04 lunes, 4 de mayo de 2020 23:44
    lunes, 4 de mayo de 2020 22:54
  • hola

    >>La función o el procedimiento proc_getCOLONIA tiene demasiados argumentos

    ese es un problema con los parametros

    No se que haces en ea clase SqlServer o cuando usas el addParameter() pero deberias revisarlo

    Tampoco se porque programas de esa forma cuando lo correcto seria que definas una capa de datos sin generar codigo dinamico

    quizas no este inicializando bien las variables y uses una instancia previa a la cual no le quitaste los parametros pr eso se añaden a los existentes creando cada vez mas

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    martes, 5 de mayo de 2020 14:20
  • Master buenas tardes!

    Efectivamente tenia el error en mi procedimiento almacenado, ya que tenía que declararlo y  poner el campo colonia como consulta tambien.. lo anexe, realice la ejecución del programa y ya me trae los datos..

    Con respecto al addparameter, tengo una clase llamada sqlServer que me permite hacer la añadir la conexión, asi como el cierre de la misma..

    Te agradezco como siempre tu tiempo y tu valioso apoyo.

    martes, 5 de mayo de 2020 20:45
  • Muchas gracias por usar los foros de MSDN! Como veo ya tienes la respuesta a tu consulta, procedere a cerrar el caso.

    Si tienes alguna otra consulta no dudes en formular la pregunta por aca en los foros y con todo gusto estaremos para ayudarte!

    Luis Diego Mora
    ________
    miércoles, 6 de mayo de 2020 16:46
    Moderador