Libreria C# para conexion y ejecución de procedure Sql Server


Una biblioteca es una colección o conjunto de subprogramas usados para desarrollar software. En general, las bibliotecas no son ejecutables, pero sí pueden ser usadas por ejecutables que las necesitan para poder funcionar correctamente.


Desarrollo de la librería:


La siguiente librería propuesta consta de dos clases y un archivo XML, los cuales nos van a permitir de una manera mucho más práctica y fácil, la conexión y mantenimiento de una base de datos principalmente el motor de Microsoft SQL Server 2014.

Primero cabe mencionar que para manipular el String de conexión, dado que es una librería (Archivo DLL), lo haremos por medio del XML ya mencionado. Este archivo contiene los siguientes elementos:



Código principal de la librería:


Luego necesitaremos una clase que le llamaremos Parametros, para poder leer el archivo XML y crear el String de conexión.


public class Parametros
{
        #region Atributos
        private string servidor;
        private string baseDatos;
        private string usuario;
        private string clave;
        private bool seguridadIntegrada;
        private string archivoParametros;
        private string cadenaConexion;
        private string error;
        private XmlDocument xml = new XmlDocument();
        private XmlNode nodo;
        #endregion

        #region Constructor
        public Parametros()
        {
            servidor = "";
            baseDatos = "";
            usuario = "";
            clave = "";
            seguridadIntegrada = true;
            archivoParametros = "";
            cadenaConexion = "";
            error = "";
        }

        #endregion
        #region Propiedades
        public string CadenaConexion
        {
            get { return cadenaConexion; }
        }

        public string Error {
            get { return error; }
        }

        #endregion
        #region Métodos Públicos
        public bool GenerarCadenaConexion(string nomArchivoParametros)
        {
            archivoParametros = Application.StartupPath + "\\" + nomArchivoParametros;
            try
            {
                xml.Load(archivoParametros);
                nodo = xml.SelectSingleNode("//Servidor");
                servidor = nodo.InnerText;
                nodo = xml.SelectSingleNode("//BaseDatos");
                baseDatos = nodo.InnerText;
                nodo = xml.SelectSingleNode("//Usuario");
                usuario = nodo.InnerText;
                nodo = xml.SelectSingleNode("//Clave");
                clave = nodo.InnerText;
                nodo = xml.SelectSingleNode("//SeguridadIntegrada");
                seguridadIntegrada = Convert.ToBoolean(nodo.InnerText);
                if (seguridadIntegrada)//autenticación windows
                {
                    cadenaConexion = "Data Source=" + servidor
                        + ";Initial Catalog=" + baseDatos
                        + ";Integrated Security=True";
                }
                else
                {
                    cadenaConexion = "Data Source=" + servidor
                           + ";Initial Catalog=" + baseDatos
                           + "; User id=" + usuario
                           + ";Password=" + clave
                           + ";Integrated Security=False";
                }
                xml = null;
                return true;
            }
            catch (Exception ex)
            {
                error = ex.Message;
                xml = null;
                return false;
            }
        }
        #endregion
} 

Seguidamente crearemos otra clase con el nombre ConexionBD, la cual a partir del String de conexión anteriormente creado, podamos crear la conexión y los respectivos métodos en los que vamos a interactuar con la base de datos.


public class ConexionBD
{
        #region Atributos
        private string archivoParametros;
        private string cadenaConexion;
        private string error;
        private bool hayConexion;
        private SqlConnection con;
        private SqlCommand cmd;
        private SqlDataReader dr;
        #endregion
        #region Propiedades
       
        public SqlDataReader Dr
        {
            get { return dr;}
        }

        public SqlConnection Con
        {
        get{return con;}
        }

        public string Error
        {
        get{return error;}
        }


        #endregion
        #region Constructor
        public ConexionBD(string archParametros)
        {
            this.archivoParametros = archParametros;
            hayConexion = false;
            con = new SqlConnection();
            cmd = new SqlCommand();
           
            CerrarConexion();
        }

        #endregion
        #region Métodos Privados
        private bool G_CadenaConexion()
        {
            try
            {
                Parametros parametros = new Parametros();
                if (!parametros.GenerarCadenaConexion(archivoParametros)) 
                {
                    error = parametros.Error;
                    parametros = null;
                    return false;
                }
                cadenaConexion = parametros.CadenaConexion;
                parametros = null;
                return true;
            }
            catch (Exception ex)
            {
                error = ex.Message;
                return false;
            }        
        }

        #endregion
        #region Métodos públicos
        //método conectar ala bd
        public bool AbrirConexion()
        {
            if (!G_CadenaConexion()) return false;
            con.ConnectionString = cadenaConexion;
            try
            {
                con.Open();
                hayConexion = true;
                return true;

            }
            catch (Exception exception)
            {
                error = exception.Message;
                hayConexion = false;
                return false;
            }
        }

        //cerrar conexion
        public void CerrarConexion()
        {
            try
            {
                con.Close();
                hayConexion = false;
            }
            catch (Exception exception)
            {
                error = "No se cerró la conexion correctamente..!"+exception.Message;  
            }
        }

        //método llenar DataTable
        public DataTable GetDatosTabla(string nomprocedimiento, 
            string[] nomparametros, params Object[] valParametros)
        {
            DataTable dt = new DataTable();
            cmd.Connection = con;
            cmd.CommandText = nomprocedimiento;
            cmd.CommandType = CommandType.StoredProcedure;
            if (nomprocedimiento.Length!=0 &&
                nomparametros.Length==valParametros.Length)
            {
                int i = 0;
                foreach (string parametro in nomparametros)
                    cmd.Parameters.AddWithValue(parametro,valParametros[i++]);
                try
                {
                    dr = cmd.ExecuteReader();
                    dt.Load(dr);
                    return dt;                    
                }
                catch (Exception ex)
                {
                    error = ex.Message;                   
                }
            }
            return dt;            
        }

        //método ejecutar procedure (transacción)
        public int Ejecutar(string nomprocedimiento,
           string[] nomparametros, params Object[] valParametros)
        {
            DataTable dt = new DataTable();
            cmd.Connection = con;
            cmd.CommandText = nomprocedimiento;
            cmd.CommandType = CommandType.StoredProcedure;
            if (nomprocedimiento.Length != 0 &&
                nomparametros.Length == valParametros.Length)
            {
                int i = 0;
                foreach (string parametro in nomparametros)
                    cmd.Parameters.AddWithValue(parametro, valParametros[i++]);
                try
                {
                    return cmd.ExecuteNonQuery();
                }
                catch (Exception ex)
                {
                    error = ex.Message;                   
                }
            }
            return 0;             
        }
        #endregion
    }


Demostración de la librería:


La complementación y uso de la misma, se los mostraré en una serie de vídeos muy explicativos, para que puedan divisar el potencial de esta hermosa librería, la cual nos va ayudar con una rápida y sólida creación de nuestros proyectos, tanto web como de escritorio.


0 comentarios: