viernes, 6 de febrero de 2015

Sencilla clase de acceso a datos (SQL Server) con .NET

Una de las cosas más básicas que necesitaremos hacer con nuestros proyectos .NET, es sin duda conectarnos a una fuente de datos. .NET dispone de una serie de clases que nos facilitan esta tarea. Habitualmente suelo utilizar SQL Server (aunque cualquier fuente de datos es aceptada), y a continuación vamos a crear una pequeña clase, muy simple, para obtener acceso a datos en este gestor.
El ejemplo crea un clase muy simple, que puede ser compilada como una DLL y que nos puede ayudar a ralizar aplicaciones en 3 capas. La clase que aquí vamos a crear, es simple pero genérica, de forma que podrá ser utilizada desde cualquier aplicación sin modificación alguna (salvo las funcionalidades extra que queramos añadirle).
public class AccesoDatos
{
public static string cadenaConexion = string.Empty;
private SqlConnection conexion;
private SqlDataAdapter da;

public static void SetCadenaConexion(string connString)
{
  if (connString != string.Empty)
    cadenaConexion = connString;
  else
    cadenaConexion = String.Empty;
}

public AccesoDatos()
{
  conexion = new SqlConnection(cadenaConexion);
}

~AccesoDatos()
{
  da.Dispose();
  conexion.Close();
  conexion.Dispose();
}


public DataSet GetDataSet(string SQL)
{
  try
  {
    da = new SqlDataAdapter(SQL, conexion);
    DataSet ds = new DataSet();
    da.Fill(ds);
    return ds;
  }
  catch (Exception ex)
  {
    throw ex;
  }
}

public void UpdateDataSet(DataSet ds)
{
  try
  {
    SqlCommandBuilder cb = new SqlCommandBuilder(da);
    da.InsertCommand = cb.GetInsertCommand();
    da.DeleteCommand = cb.GetDeleteCommand();
    da.UpdateCommand = cb.GetUpdateCommand();
    da.InsertCommand.Connection = conexion;
    da.DeleteCommand.Connection = conexion;
    da.UpdateCommand.Connection = conexion;
    da.Update(ds);
    cb.Dispose();
  }
  catch (Exception ex)
  {
    throw ex;
  }
}

public DataTable GetDataTable(string SQL)
{
  try
  {
    SqlDataAdapter comando = new SqlDataAdapter(SQL, conexion);
    DataSet ds = new DataSet();
    comando.Fill(ds);
    comando.Dispose();
    return ds.Tables[0];
  }
  catch (Exception ex)
  {
    throw ex;
  }
}

public SqlDataReader GetDataReader(string SQL)
{
  try
  {
    conexion.Open();
    SqlCommand comando = new SqlCommand(SQL, conexion);
    SqlDataReader dr = comando.ExecuteReader();
    //conexion.Close();
    comando.Dispose();
    return dr;
  }
  catch (Exception ex)
  {
    throw ex;
  }
}

public string GetScalarValue(string SQL)
{
  try
  {
    conexion.Open();
    SqlCommand comando = new SqlCommand(SQL, conexion);
    string sv = (string)comando.ExecuteScalar();
    conexion.Close();
    comando.Dispose();
    return sv;
  }
  catch (Exception ex)
  {
    throw ex;
  }
}

public int ExecuteSQL(string SQL)
{
  try
  {
    SqlCommand comando = new SqlCommand();
    int resul = 0;
    comando.CommandText = SQL;
    comando.CommandType = CommandType.Text;
    comando.Connection = conexion;
    conexion.Open();
    resul = comando.ExecuteNonQuery();
    conexion.Close();
    return resul;
  }
  catch (Exception ex)
  {
    throw ex;
  }
}

public string GetField(string tabla, string clavePrimaria, string valorBuscado, string campoDevuelto)
{
  DataTable dt = new DataTable();
  string SQL = "";

  try
  {
    SQL = "SELECT " + campoDevuelto + " FROM " + tabla + " WHERE " + clavePrimaria + "='" + valorBuscado + "'";
    dt = this.GetDataTable(SQL);
    if (dt.Rows.Count > 0)
      return dt.Rows[0][campoDevuelto].ToString();

    return "";
  }
  catch (Exception ex)
  {
    return "Error en la búsqueda " + ex.Message;
  }
}


#region " Metodos de obtención de nueva clave primaria "

public string GetPrimaryKey(string tabla, string campo, short longitud)
{
  try
  {
    // SQL para obtener ultimo codigo
    string SQL = "SELECT TOP 1 " + campo + " FROM " + tabla + " ORDER BY " + campo + " DESC";
    SqlDataReader dr = this.GetDataReader(SQL);
    string codigo;

    // Obtener codigo
    if (dr.HasRows)
    {
      dr.Read();
      codigo = Convert.ToString(dr[campo]);
    }
    else
      codigo = "0";

    codigo = Convert.ToString(int.Parse(codigo) + 1);

    // Rellenar de ceros y devolver
    codigo = this.Ceros(codigo, longitud);   // dtTabla.Columns(cCampo).MaxLength)

    dr.Close();
    dr.Dispose();
    return codigo;
  }
  catch (Exception e)
  {
    return e.Message;
  }
}

private string Ceros(string texto, short ceros)
{
  string cadena = texto;
  string _ceros;
  if (ceros > texto.Length)
    _ceros = new string('0', ceros - cadena.Length) + cadena;
  else
    _ceros = cadena.Substring(0, ceros);
  return _ceros;
}

public int GetLastId(string tabla)
{
  return Convert.ToInt32(GetScalarValue("SELECT ident_current('" + tabla + "')"));
}

#endregion
Espero que os sirva.

0 comentarios :

Publicar un comentario

 

Copyright @ 2015 Tosblama