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