none
C# y SQL SERVER - DUDAS CLASES. RRS feed

  • Pregunta

  • ola amigos del foro.

    Espero que todos se encuentren bien. 

    Me encuentro estudiando informática y me veo con una complejidad en cuanto al desarrollo de clases en C#.Net y SQL server.

    Resulta que para cada tabla de la base de datos genere una entidad como clase con su respectivo CRUD y para aquellas clases que sustentan las relaciones N a N , la compuse de otras clases.

    mi diagrama de base de datos. 

    https://ibb.co/caHemo

    Para el caso del ejemplo,  solo mostrare las clases que están subrayadas con rojo en la imagen de arriba.

    Clase ERoles

        public class ERoles
        {
            /*Declaracion de variables privades para las entidades del software
            el fin es estas lineas son reflejar los atributos persistentes
            en el gestor de la base de datos-La denominamos la capa entidad*/
            private int id_rol;
            private string desc_rol;
            private bool estado_rol;
            private List<ERoles_formulario> listFormulario;
    
            /*Declaracion de los metodos constructores de la clase*/
            public ERoles(int id_rol, string desc_rol, bool estado_rol)
            {
                this.id_rol = id_rol;
                this.desc_rol = desc_rol;
                this.estado_rol = estado_rol;
            }
    
            public ERoles()
            {
    
            }
    
            /*Las propiedades controlan el acceso a las variables
            privadas que sostiene la clase. Estos accesadores son Get(Para obtener el valor de la variable privada)
            y Set(Para asignar un valor a la variable privada) despues de instanciar la clase como un objeto*/
            public int Id_rol
            {
                get
                {
                    return id_rol;
                }
    
                set
                {
                    id_rol = value;
                }
            }
    
            public string Desc_rol
            {
                get
                {
                    return desc_rol;
                }
    
                set
                {
                    desc_rol = value;
                }
            }
    
            public bool Estado_rol
            {
                get
                {
                    return estado_rol;
                }
    
                set
                {
                    estado_rol = value;
                }
            }
    
            public List<ERoles_formulario> ListFormulario
            {
                get
                {
                    return listFormulario;
                }
    
                set
                {
                    listFormulario = value;
                }
            }
    }

    Clase EFormulario

     public class EFormulario
        {
            private int id_formulario;
            private string desc_formulario;
            private bool estado_formulario;
    
            public EFormulario(int id_formulario, string desc_formulario, bool estado_formulario)
            {
                this.id_formulario = id_formulario;
                this.desc_formulario = desc_formulario;
                this.estado_formulario = estado_formulario;
            }
    
            public EFormulario()
            {
    
            }
            public int Id_formulario
            {
                get
                {
                    return id_formulario;
                }
    
                set
                {
                    id_formulario = value;
                }
            }
    
            public string Desc_formulario
            {
                get
                {
                    return desc_formulario;
                }
    
                set
                {
                    desc_formulario = value;
                }
            }
    
            public bool Estado_formulario
            {
                get
                {
                    return estado_formulario;
                }
    
                set
                {
                    estado_formulario = value;
                }
            }
    }
    

    Clase Intermedia

        public class ERoles_formulario
        {
            private ERoles roles;
            private EFormulario formulario;
    
            public ERoles_formulario(ERoles roles, EFormulario formulario)
            {
                this.roles = roles;
                this.formulario = formulario;
            }
    
            public ERoles_formulario()
            {
                this.roles = new ERoles();
                this.formulario = new EFormulario();
            }
            public ERoles Roles
            {
                get
                {
                    return roles;
                }
    
                set
                {
                    roles = value;
                }
            }
    
            public EFormulario Formulario
            {
                get
                {
                    return formulario;
                }
    
                set
                {
                    formulario = value;
                }
            }
    

    Como dije anteriormente, para cada una de estas entidades les asigne metodos CRUD. 

    Lo métodos a manera general serian :

    Guardar: Retorna un booleano.

    Modificar: Retorna un booleano.

    Eliminar: Retorna un booleano.

    Obtener: Retorna 1 Objeto de la base de datos.

    Listar: Retorna una Lista de objetos de la base de datos. 

    Lector: Me permite armar el objeto que viene de la base de datos. 

    y para este caso, el contexto seria cargar en la clase Roles, los formularios que se encuentren asociados en la base de dato. para lograr ese cometido utilizo un método lector de la clase Roles:

            public ERoles LectorRoles(IDataReader reader)
            {
                /*/
                 * Implementamos este metodo con el fin de armar un objeto en base a los registros
                 * traidos de la base de datos y retornarlos desde donde sea invocado. Por lo general
                 * este metodo sera utilizado en las funciones Obtener() y Listar() de cada Clase.
                 * /*/
                ERoles rol = new ERoles();
                ERoles_formulario formulario = new ERoles_formulario();
                
                rol.Id_rol = Convert.ToInt32(reader["ID_ROL"]);
                rol.Desc_rol = Convert.ToString(reader["DESC_ROL"]);
                rol.Estado_rol = Convert.ToBoolean(reader["ESTADO_ROL"]);
                rol.ListFormulario=formulario.Obtener_Roles_formulario(Convert.ToInt32(reader["ID_ROL"]));
    
                return rol;
    
            }

    El problema esta en que cuando ejecuto el código, este cae en un LOOP y lo desconozco por que. Quizás este implementando mal las clases.

    alguna ayuda o sugerencia, estaría demasiado agradecido. 

    Metodo obtener y lector de ERoles_formulario:

            public ERoles_formulario Obtener_Roles_formulario(int idRol, int idFormulario)
            {
                /*Este metodo retorna una objeto para poder utilizarlo en la capa persistencia.
              retorna solo 1 objeto */
    
                //Declaramos un objeto para almacenar los datos traido de la base de datos y asignar
                //sus atributos mediante un metodo Lector()
                ERoles_formulario roles_formulario = null;
    
                //Encerramos en un TryCatch la ejecucion del procedimiento para poder captura algun error ya sea
                //En la base de datos o en la funcion.
                try
                {
                    //La palabra reservada "Using" sirve para implementar un objeto
                    //que se eliminara definitivamente de la memoria una vez implementado
                    //NOTA: Para este metodo en particular es necesario cerrar la conexion con el 
                    //el gestor para asi evitar conexiones innecesarias.
                    //ConfigurationManager.ConnectionStrings["Cadena"].ToString() recopila la cadena de conexion
                    //almacenados en el appconfig del software en la capa presentacion.
    
                    using (SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["Cadena"].ConnectionString))
                    {
                        //Abrimos la conexion
                        conn.Open();
    
                        //Declaramos el command que nos permite entregar que tipo de funcion
                        //Realizaremos sobre la base de datos.
                        using (SqlCommand cmd = new SqlCommand())
                        {
                            //Asignamos el nombre del procedimiento almacenado
                            cmd.CommandText = "SpROLES_FORMULARIOListar";
                            //Asignamos el tipo de instruccion a realizar
                            cmd.CommandType = CommandType.StoredProcedure;
                            //Asignamos la conexion al comando
                            cmd.Connection = conn;
    
                            //Declaramos los parametros que estan en el procedimiento almacenado
                            //y le asignados los valores que estan en el obejo pasado como parametro.
                            cmd.Parameters.Add(new SqlParameter("@ID_ROL", idRol));
                             cmd.Parameters.Add(new SqlParameter("@ID_FORMULARIO", idFormulario));
    
                            //Instanciamos un Objeto Reader y ejeutamos el procedimiento almancenado.
                            //el reader permite almacenar el o los registros obtenidos en la operacion
    
                            SqlDataReader reader = cmd.ExecuteReader();
    
                            //Recorremos el Objeto reader para asignar a la instancia de objeto definida
                            //al principio de este metodo y le asignamos los valores al objeto con el metodo Lector().
                            while (reader.Read())
                            {
                                roles_formulario = LectorRolesFormulario(reader);
                            }
    
                        }
    
                        //Retornamos el objeto
                        return roles_formulario;
    
                    }
    
                }//En caso de existir un error, retornamos Null
                catch (Exception)
                {
                    return null;
                }
            }
    
            public List<ERoles_formulario> Listar_Roles_formulario(int idRol)
            {
                /*Este metodo retorna una coleccion de objetos para poder utilizarlo en la capa persistencia.
              */
    
                //Declaramos una lista objeto para almacenar los datos traido de la base de datos y asignar
                //sus atributos mediante un metodo Lector()
                List<ERoles_formulario> lst = new List<ERoles_formulario>();
    
                //Encerramos en un TryCatch la ejecucion del procedimiento para poder captura algun error ya sea
                //En la base de datos o en la funcion.
                try
                {
                    //La palabra reservada "Using" sirve para implementar un objeto
                    //que se eliminara definitivamente de la memoria una vez implementado
                    //NOTA: Para este metodo en particular es necesario cerrar la conexion con el 
                    //el gestor para asi evitar conexiones innecesarias.
                    //ConfigurationManager.ConnectionStrings["Cadena"].ToString() recopila la cadena de conexion
                    //almacenados en el appconfig del software en la capa presentacion.
    
                    using (SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["Cadena"].ConnectionString))
                    {
                        //Abrimos la conexion
                        conn.Open();
    
                        //Declaramos el command que nos permite entregar que tipo de funcion
                        //Realizaremos sobre la base de datos.
                        using (SqlCommand cmd = new SqlCommand())
                        {
    
                            //Asignamos el nombre del procedimiento almacenado
                            cmd.CommandText = "SpROLES_FORMULARIOListar";
                            //Asignamos el tipo de instruccion a realizar
                            cmd.CommandType = CommandType.StoredProcedure;
                            //Asignamos la conexion al comando
                            cmd.Connection = conn;
    
                            cmd.Parameters.Add(new SqlParameter("@ID_ROL", idRol));
                            //Instanciamos un Objeto Reader y ejeutamos el procedimiento almancenado.
                            //el reader permite almacenar el o los registros obtenidos en la operacion
                            SqlDataReader reader = cmd.ExecuteReader();
    
                            //Recorremos el Objeto reader para asignar a la instancia de objeto definida
                            //al principio de este metodo y le asignamos los valores al objeto con el metodo Lector().
                            while (reader.Read())
                            {
                                //Declaramos un objeto a nivel del while para poder asignarlo a la lista definida en un principio
                                //de este metodo.
                                ERoles_formulario newRolFormulario = new ERoles_formulario();
    
                                //Leemos los datos de la base de datos y la asignamos al objeto
                                newRolFormulario = LectorRolesFormulario(reader);
    
                                //Agregamos el objeto a la lista definida en un principio
                                lst.Add(newRolFormulario);
                            }
    
                        }
                        //Retornamos la lista
                        return lst;
    
                    }
                }
    
                catch (Exception)
                {
                    return null;
                }
            }
    
            public ERoles_formulario LectorRolesFormulario(IDataReader reader)
            {
                /*/
                 * Implementamos este metodo con el fin de armar un objeto en base a los registros
                 * traidos de la base de datos y retornarlos desde donde sea invocado. Por lo general
                 * este metodo sera utilizado en las funciones Obtener() y Listar() de cada Clase.
                 * /*/
                ERoles_formulario RolForumlario = new ERoles_formulario();
    
                RolForumlario.Formulario = RolForumlario.Formulario.Obtener_Formulario(Convert.ToInt32(reader["ID_FORMULARIO"]));
                RolForumlario.Roles = RolForumlario.Roles.Obtener_Roles(Convert.ToInt32(reader["ID_ROL"]));
    
                return RolForumlario;
    
            }
    
    
    
        }

    sábado, 7 de julio de 2018 21:49