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 + "')")); } #endregionEspero que os sirva.
0 comentarios :
Publicar un comentario