Interfaz para sentencias SQL en .NET
Permite ejecutar rápidamente sentencias en una base de datos SQL Server

Fecha: 09/Nov/2004 (4 de noviembre del 2004)
Autor: José Manuel Makepeace ([email protected])

 


A continuación encontrarán el código de una librería que permite de forma sencilla conectarse a una base de datos SQL Server y ejecutar sentencias básicas, de forma similar al Data Access Application Block de Microsoft, aunque no tan completo como éste. Este código contiene funciones para establecer una conexión con un servidor SQL Server proporcionando los parámetros de conexión (Servidor, Base de datos, Usuario, Contraseña) en una clase estática, luego, utilizando las funciones contenidas en ella, pueden realizarse las sentencias básicas.

El código de la clase datos es el siguiente:

 

using System;
using System.Data.SqlClient;
using System.Data;
using System.Windows.Forms;
namespace custData
{
    public class datos
    {
        private static SqlConnection SQL1;

        //Inicializar la conexion
        public static void initConn(string SERVER, string BASEDATOS, string USER, string PASSWORD)
        {
            string cn = "user id="+USER+";password="+PASSWORD+";data source="+SERVER+";initial catalog="+BASEDATOS;
            SQL1 = new SqlConnection(cn);
        }
        private static SqlParameter SQL_param_singparam(string parametro)
        {
            //Primero obtener los 2 strings separados por ;
            int pos = parametro.IndexOf(";");
            string s1, s2, s3;
            s3 = parametro.Substring(0,1);
            s1 = parametro.Substring(1,pos-1);
            s2 = parametro.Substring(pos+1, parametro.Length-pos-1);
            SqlParameter p = new SqlParameter();
            if(s3=="c")  p = new SqlParameter(s1, s2);
            if(s3=="n")  p = new SqlParameter(s1, Convert.ToDecimal(s2));
            if(s3=="d")  p = new SqlParameter(s1, Convert.ToDateTime(s2));
            return(p);
        }
        private static void SQL_param_addparams(ref SqlCommand cm, string[] parametros)
        {
            //Agregar los parámetros a la colección
            int a;
            for(a=0;a<=parametros.Length-1;a++)
                cm.Parameters.Add(SQL_param_singparam(parametros[a]));
        }
        public static string SQL_scalar_str(string consulta, params string[] parametros)
        {
            string s="";
            SqlCommand cm = new SqlCommand(consulta, SQL1);
            if(parametros.Length>0) SQL_param_addparams(ref cm, parametros);
            SQL1.Open();
            try
            {
                s = cm.ExecuteScalar().ToString();
            }
            catch(System.Exception ex)
            {
                MessageBox.Show("misc.dll : " + ex.ToString());
            }
            finally 
            {
                SQL1.Close();
            }
            cm.Dispose();
            return(s);
        }
        public static decimal SQL_scalar_num(string consulta, params string[] parametros)
        {
            decimal s=0;
            SqlCommand cm = new SqlCommand(consulta, SQL1);
            SQL_param_addparams(ref cm, parametros);
            SQL1.Open();
            try
            {
                s = Convert.ToDecimal(cm.ExecuteScalar().ToString());
            }
            catch(System.Exception ex)
            {
                MessageBox.Show("Error en datos.dll : " + ex.ToString());
            }
            finally
            {
                SQL1.Close();
            }
            cm.Dispose();
            return(s);
        }
        public static DataSet SQL_dataset(string consulta, params string[] parametros)
        {
            DataSet ds = new DataSet();
            SqlDataAdapter da = new SqlDataAdapter();
            SqlCommand cm = new SqlCommand(consulta, SQL1);
            if(parametros.Length>0) SQL_param_addparams(ref cm, parametros);
            da.SelectCommand = cm;
            da.Fill(ds);
            cm.Dispose();
            da.Dispose();
            return(ds);
        }
        public static DataSet SQL_dataset(string consulta)
        {
            DataSet ds = new DataSet();
            SqlDataAdapter da = new SqlDataAdapter();
            SqlCommand cm = new SqlCommand(consulta, SQL1);
            da.SelectCommand = cm;
            da.Fill(ds);
            cm.Dispose();
            da.Dispose();
            return(ds);
        }
        public static void SQL_exec(string consulta, params string[] parametros)
        {
            SqlCommand cm = new SqlCommand(consulta, SQL1);
            if(parametros.Length>0) SQL_param_addparams(ref cm, parametros);
            SQL1.Open();
            try
            {
                cm.ExecuteNonQuery();
            }
            catch(System.Exception ex)
            {
                MessageBox.Show("Error en datos.dll : " + ex.ToString());
            }
            finally
            {
                SQL1.Close();
            }
            cm.Dispose();
        }     
    }
}

 

La forma de utilizarla es la siguiente:

Importar el NameSpace custData.

Invocar la rutina conectar utilizando los parámetros de esta forma:  datos.initConn(SERVIDOR, BASEDATOS, USUARIO, PASSWORD)

Dependiendo de la operación a realizar, utilizar las funciones de la siguiente forma:

     Datos.funcion(“sentencia de sql / llamada a Store procedure”, “tipodato@nombreparametro;valor”,”tipodato2@nombreparametro2;valor2”,…..)

      Tomando como tipos de datos los siguientes: “n” = numérico, “c” = alfanumérico, “d” = fecha

Por ejemplo:

      Datos.Sql_scalar_num(exec SP_TOTALPORCODIGO @cod”, “n@cod;125”)

      Esta devuelve un valor numérico, pasando como parámetro “cod” el valor numérico 125.

Las funciones posibles son las siguientes:

      Datos.Sql_dataset : Obtiene como resultado un dataset con las filas devueltas por la consulta

      Datos.Sql_scalar_num : Devuelve como resultado un valor numérico

      Datos_Sql_scalar_str : Devuelve como resultado un valor alfanumérico

      Datos_Sql_exec : No devuelve ningún valor, solamente ejecuta la sentencia, puede ser utilizado para UPDATE, INSERT, DELETE.

Mi objetivo con este código es mantener la idea de pasar parámetros por medio de cadenas (al igual que en la interfaz para crystal reports), para no tener que declarar cada parámetro, con eso nos ahorramos unas cuantas líneas.

 


ir al índice