RSS

Programacion en tres capas en C# usando asp.net

19 Jun

En este post vamos a realizar una aplicacion usando visual studio 2008 en c#, en donde paso a paso se mostrara como crear un programa en c# utilizando tres capas, donde la tercera capa de presentacion se realizara en asp.net, este blog lo he realizado con lujo de detalles para que no existan dudas, pero aun asi, si las hay favor de comentarlas.

Empecemos

Para comenzar debemos tener una fundamentacion teorica, asi que recomiendo revisen como funciona la programacion en tres capas en el siguiente articulo de Wikipedia Programacion por capas antes de comenzar con este lab.

Ahora los requerimientos

Antes de comenzar necesitamos instalar

  1. Visual Studio (se puede instalar 2008 o 2010 en este lab se usara 2008)
  2. SQL Server (se puede instalar 2005 ó 2008 ó 2008R2 ó cualquier otro gestor teniendo en cuenta que la cadena de conexion cambiara, se recomienda usar SQL SERVER ya que el ejemplo que se muestra tiene la intencion de evitar errores pero si tienes experiencia en otro gestor usalo)

Empezemos con la cadena de conexion

La cadena de conexion es una de las partes mas importantes de este programa puesto que es con lo que nuestra base de datos se comunicara con el programa, especificamente solamente con la capa de datos, si tienes algo de experiencia con sql server esto deberia ser algo sencillo para ti.

Despues de instalar SQL Server, se realiza una prueba de conexion donde podras ingresar tu login sa y tu password (el cual se ingreso al instalar SQL), despues de que se realize esta prueba satisfactoriamente, desconectate, con el boton y vuelve a conectarte con el boton, asi podemos asegurar que lo que vamos a colocar en la cadena de conexion sean parametros validos, y asi evitar errores.

Para realizar la cadena de conexion debemos saber 4 datos.

  1. El nombre de nuestro servidor identificado como “Data Source” en la cadena de conexion
  2. El nombre de nuestra base de datos como “Initial Catalog”
  3. El nombre de el usuario “User”
  4. El password con el que se identifica el usuario “Password”

Todos estos datos a exepcion de el nombre de la base de datos (Initial Catalog) los encontramos cuando nos conectamos con sql server asi que la siguente imagen aclara los siguientes pasos de como construir la cadena de conexion.

Para crear la cadena solo debemos substituir los datos mostrados en la imagen anterior aqui dejo la cadena para que no exista confusion a la hora de transcibir

@"Data Source=???????????;Initial Catalog=??????;User ID=sa;Password=????????"

Nuestra ultima duda para la cadena de conexion es Initial Catalog la cual para efectos de este lab le asignaremos Empleados entonces nuestra cadena quedaria de la siguiente manera

@"Data Source=???????????;Initial Catalog=Empleados;User ID=sa;Password=????????"

Si cuentas con conocimientos de base de datos solo asigna cualsea el nombre de tu base de datos.

Crear la base de datos e insertar un registro

Ahora nos conectamos en SQL Server y dando click en la opcion New Query escribimos create database Empleados y presionamos F5 nos deberia mandar el mensaje Command(s) completed successfully., con eso hemos creado la base de datos llamada Empleados ahora tenemos que decirle a SQL que esa es la base de datos que queremos usar entonces escribimos use Empleados y presionamos nuevamente F5 y nos vuelve a enviar el mensaje Command(s) completed successfully. ya creada la base de datos necesitamos crear una tabla donde se puedan guardar nuestros datos que vamos a utilizar para esta nuestra aplicacion entonces escribimos el siguiente script y presionamos F5

create table Datos
(
id int identity primary key not null,
strNombre varchar(20),
strApellido varchar(20),
intEdad tinyint
)

Este script crea la una tabla llamada Datos la cual tiene 4 campos:

  1. id : es la llave primaria, es de tipo entero y no acepta valores nulos, y sirve para darle un identificar al empleado.
  2. strNombre: es de tipo varchar con capacidad para 20 caracteres el cual nos sirve para almacenar el nombre del empleado
  3. strApellido: es de tipo varchar con capacidad para 20 caracteres el cual nos sirve para almacenar el apellido del empleado

  4. intEdad: es de tipo entero de capacidad para guardar valores de hasta 127 el cual nos sirve para almacenar la edad del empleado

Ahora ya con la tabla Datos vamos a hacerlo un poco mas interesante, crearemos un procedimiento almacenado para que nuestro programa pueda guardar los datos introducidos desde la capa de presentacion.

En SQL escribimos el siguiente script para crear nuestro procedimiento y presionamos F5

create proc insDatos
(
@nombre varchar(20),
@apellido varchar(20),
@edad int
)
as insert into Datos values(@nombre,@apellido,@edad)

Este procedimiento realiza una insert y lo ejecutamos de la siguiente manera con su correspondiente F5 despues de escribirlo

exec insDatos 'Juan','Perez',23

solo necesitamos saber los el tipo de argumentos que toma y el nombre del procedimiento. Ahora solo nos falta verificar que el registro se haya incluido en nuestra base de datos eso lo realizamos con lo siguiente seguido de un F5

select * from Datos

Con esto sql nos presentara en la ventana Results que se muestra en la imagen de bajo, con los datos que corresponden a la insercion realizada por nuestro procedimiento.

Photobucket

Si lo deseas y tienes experiencia con scripts aqui pongo todo lo que se necesita para nuestro lab un simple copy/paste realizara todo lo necesario

create database Empleados
GO
use Empleados
GO
create table Datos
(
id int identity primary key not null,
strNombre varchar(20),
strApellido varchar(20),
intEdad tinyint
)
GO
create proc insDatos
(
@nombre varchar(20),
@apellido varchar(20),
@edad int
)
as insert into Datos values(@nombre,@apellido,@edad)
GO
exec insDatos 'Juan','Perez',23
GO
select * from Datos
GO

Con esto finalizamos en nuestra base de datos es hora de programar en 3 capas

Capa de datos

Ya tenemos configurada nuestra base de datos lista para ser usada, ahora abriremos Visual Studio y crearemos un nuevo proyecto en apartado tipo de proyecto seleccionamos Visual C# y despues seleccionamos Windows, dentro de plantillas seleccionamos Plantillas instaladas de Visual Studio despues Biblioteca de Clases, llamaremos a nuestro proyecto Datos y la solucion llamada TresCapas, en la siguiente imagen se aclara los pasos antes descritos para la configuracion de nuestra solucion

Photobucket

Ahora en Visual Studio nos presenta una clase llamada Class1.cs que nosotros no pedimos, por lo que la eliminaremos, haciendo click derecho sobre la clase en el explorador de soluciones y seleccionaremos eliminar, a continuacion Visual Studio nos pedira una confirmacion a la cual aceptaremos. En la siguiente imagen se muestra el proceso de borrar Class1.cs

Ahora crearemos una clase llamada Configuracion en la cual pondremos nuesta cadena de conexion que anteriormente generamos para ello en el explorador de soluciones seleccionaremos el proyecto Datos y le haremos un click derecho para que nos muestre las opciones en ellas seleccionaremos agregar y por ultimo en el menu emergente seleccionaremos clase, todo el proceso se muestra en la siguiente imagen

Photobucket

El paso anterior nos llevara a una pantalla donde se muestra todos los elementos que Visual Studio puede agregar a nuestro proyecto, pero como hemos elegido agregar una clase, Visual Studio tiene todo seleccionado por nosotros lo unico que hay que hacer en este paso es escribir el nombre de nuestra clase la cual llamaremos Configuracion en el cuadro de texto y dar click en agregar, a continuacion se muestra una imagen del proceso.

Photobucket

Ahora Visual Studio nos muestra la estructura basica de nuestro programa, para hacer nuestra clase de configuracion tenemos que hacer publica nuestra clase agregandole la palabra reservada public antes de class y acontinuacion creamos una cadena de caracteres que contendra la cadena de conexion antes creada.

y con esto ya establecido le crearemos un metodo a la clase Configuracion el cual se llamara CadenaConexion, y se encargara de proporcionar la cadena de conexion a cualquier proceso que la necesite.
el codigo siguiente muestra como deberia de quedar nuestra clase y abajo se muestra una imagen de la clase en Visual Studio.

public class Configuracion
{
    static string cadenaConexion =
    @"Data Source=???;Initial Catalog=Empleados;User ID=sa;Password=???";
    
    public static string CadenaConexion
    {
        get { return cadenaConexion; }
    }
}

En el dado casi que se desee acceder con autentificacion de windows lo que se tiene que hacer es agregar Trusted_Connection=true o Integrated Security=SSPI a la linea de conexion en vez de el usuario y el password.

Photobucket

El siguiente paso es agregar otra clase de la misma manera que lo hicimos con Configuracion, pero esta vez nuestra clase se llamara MetodosDatos, esta clase tendra la tarea de acceder a la base de datos para los metodos para obtener la informacion de nuestra base de datos.
Al igual que configuracion le agregaremos la propiedad de public, pero ademas a esta clase le agregaremos dos referencias.

using System.Data.SqlClient;
using System.Data;

Las cuales se insertan antes del namespace estas referencias nos sirven para llamar metodos ya establecidos en C#, A continuacion agregaremos los siguientes tres metodos

CrearComando
Este metodo nos servira para crear un comando sql estandard como un select el cual sera regresado por su metodo return

public static SqlCommand CrearComando()
{
    string _cadenaConexion = Configuracion.CadenaConexion;
    SqlConnection _conexion = new SqlConnection();
    _conexion.ConnectionString = _cadenaConexion;
    SqlCommand _comando = new SqlCommand();
    _comando = _conexion.CreateCommand();
    _comando.CommandType = CommandType.Text;
    return _comando;
}

CrearComandoProc
Este metodo al igual que el anterior nos crea un comando sql, pero con la diferencia que este metodo nos creara nuestro comando de manera que pueda ejecutar nuestro procedimiento almacenado que establecimos anteriormente llamado InsDatos.

public static SqlCommand CrearComandoProc()
{
    string _cadenaConexion = Configuracion.CadenaConexion;
    SqlConnection _conexion = new SqlConnection(_cadenaConexion);
    SqlCommand _comando = new SqlCommand("InsDatos", _conexion);
    _comando.CommandType = CommandType.StoredProcedure;
    return _comando;
}

EjecutarComandoInsert
Este metodo obtiene como parametro un comando sql que proviene de el metodo anterior CrearComandoProc, este metodo ejecuta el procedimineto almacenado que se le ha asignado al comando. En la siguiente clase que agregaremos veremos como se le asigna el procedimiento almacenado a este comando.

public static int EjecutarComandoInsert(SqlCommand comando)
{
    try
    {
        comando.Connection.Open();
        return comando.ExecuteNonQuery();
    }
    catch { throw; }
    finally
    {
        comando.Connection.Dispose();
        comando.Connection.Close();
    }
}

EjecutarComandoSelect
Este metodo ejecutara un comando select el cual nos regresara un datatable con todos los registros que se encuentren en alguna tabla dada, toma como parametro el comando que contiene la sentencia sql select.

public static DataTable EjecutarComandoSelect(SqlCommand comando)
    {
    DataTable _tabla = new DataTable();
    try{
        comando.Connection.Open();
        SqlDataAdapter adaptador = new SqlDataAdapter();
        adaptador.SelectCommand = comando;
        adaptador.Fill(_tabla);
    }
    catch (Exception ex)
    { throw ex; }
    finally
    { comando.Connection.Close(); }
    return _tabla;
}

Estas serian todas las clases que MetodosDatos.cs contendra, para evitar confusiones he agregado una imagen que muestra la estructura completa de nuestro metodo.

Ahora crearemos la clase que generara los comandos que se pasaron como parametros en la clase anterior MetodosDatos.cs.
Al igual que creamos las clases Configuracion y MetodosDatos anteriores crearemos una clase llamada AccesoDatos y se le agregara la propiedad public y las referencias

using System.Data.SqlClient;
using System.Data;

de la misma manera que se realizo en la clase MetodosDatos.cs. En esta clase utilizaremos dos metodos:

Insert Esta clase obtiene un comando sql proveniente de la clase MetodosDatos de su metodo CrearComandoProc le agrega los parametros que se necesitan para completar el procedimiento almacenado y despues lo ejecuta con el metodo EjecutarComandoInsert que se encuentra en la clase MetodosDatos, de esta manera podemos ingresar informacion a nuestra base de datos tan solo con asignarle parametros a nuestro metodo Insert el cual tien asignados 3 parametros Nombre, Apellido y Edad los cuales son los campos que tenemos asignados en nuestra base de datos.

public int Insert(string Nombre, string Apellido, int Edad)
{
    SqlCommand _comando = MetodosDatos.CrearComandoProc();
    _comando.Parameters.AddWithValue("@nombre", Nombre);
    _comando.Parameters.AddWithValue("@apellido", Apellido);
    _comando.Parameters.AddWithValue("@edad", Edad);
    return MetodosDatos.EjecutarComandoInsert(_comando);
}

ObtenerEmpleados Esta clase obtiene un comando de el metodo CrearComando de la Clase Metodos Datos lo almacena en _comando y despues le agrega la sentencia a ejecutar y por medio de el metodo EjecutarComandoSelect la ejecuta y nos regresa un DataTable que es un objeto que datos que contiene la estructura de una tabla (filas, columnas, registros, etc),

public static DataTable ObtenerEmpleados()
{
    SqlCommand _comando = MetodosDatos.CrearComando();
    _comando.CommandText = "SELECT * FROM Datos";
    return MetodosDatos.EjecutarComandoSelect(_comando);
}

Estas dos clases integran a AccesoDatos.cs en la siguiente imagen se muestra la estructura completa

Con esto hemos terminado con nuestra capa de datos es hora de crear nuestra capa de negocio.

Capa de negocio

Para crear nuestra capa de negocio empezaremos por crear un nuevo proyecto, para esto nos situaremos en el explorador de soluciones y le haremos un click derecho a nuestra solcion llmada Tres Capas la cual nos presentara un menu y elegiremos Agregar y en el menu emergente seleccionaremos Nuevo Proyeto el proceso se muestra en la siguiente imagen

Ahora Visual estudio nos presenta todos los tipos de proyectos que podemos agregar a nuestra solucion, al igual que en Datos agregaremos una biblioteca de clases para ello en tipos de proyecto seleccionamos Windows y en plantillas seleccionamos Biblioteca de Clases, despues le asignamos el nombre de nuestra segunda capa en esta caso le llamaremos Negocio y le daremos aceptar. el proceso ilustra acontinuacion.

De igual manera que realizamos con la capa de Datos, Visual Studio nos presenta una clase Class1.cs que no pedimos por lo que la borraremos y crearemos una nueva llamada AccesoLogica esta sera la encargada de enviar y recibir informacion de las dos capas la de Datos y la de Presentacion.

Ya con nuestra clase AccesoLogica.cs necesitamos agregar la referencia de nuestra capa anterior por lo que en referencias de el proyecto negocio le haremos un click derecho y seleccionaremos agregar referencia.

Visual Studio nos presenta con una ventana en la cual podemos elegir varios tipos de referencias, en esta ventana seleccionaremos la pestaña de Proyectos y ahi nos aparece nuestra biblioteca de clases Datos la cual esta contenida en nuestra Solucion llamada TresCapas. la seleccionamos y aceptamos

Ya con la referencia agregada, la podemos usar en nuestra clase AccesoLogica para usarla debemos agregarla de igual manera que lo hicimos en las clases anteriormente creadas, en la parte superior de nuestra clase agregamos

using System.Data;
using System.Data.SqlClient;

Ahora agregaremos la propiedad de public a nuestra clase AccesoLogica.

Con lo anterior en su lugar podemos empezar a crear nuestros metodos para nuestra clase que en este caso seran solo dos ObtenerEmpleados e Insert

El metodo ObtenerEmpleados de esta clase AccesoLogica utiliza el metodo con el mismo nombre que se establecio en la capa de Datos que se encuentra en AccesoDatos, el cual recordaremos que nos regresa un Datatable conteniendo el resultado de la sentencia select. de esta manera la capa de negocio se comunica con la capa de datos y obtiene informacion proveniente de la base de datos.

public static DataTable ObtenerEmpleados()
{
return AccesoDatos.ObtenerEmpleados();
}

El metodo Insert recibe los parametros Nombre, Apellido y Edad y los envia por medio de una instancia de AccesoDatos a su metodo Insert.

public int Insert(string Nombre, string Apellido, int Edad)
{
AccesoDatos acceso = new AccesoDatos();
return acceso.Insert(Nombre, Apellido, Edad);
}

Todo lo anteriormente descrito se resume en la siguiente imagen

Con esto terminamos nuestra capa de Negocio y continuamos con nuestra ultima capa la capa de Presentacion.

Capa de presentacion

La ulima capa sera de presentacion y la realizaremos en ASP.NET, para esto debemos agregar un proyecto a nuestra solucion, para ello en haremos click derecho en nuestra solucion llamada TresCapas seleccionaremos agregar y posteriormente Nuevo Proyecto.

A continuacion se muestra la pantalla de agregar nuevo proyecto en el cual seleccionaremos en tipo de proyectos, Visual C# y acontinuacion Web, ahora en plantillas seleccionaremos Aplicacion Web ASP.NET y le asignaremos el nombre de Presentacion y aceptaremos.

Ahora Visual Studio nos presentara Default.aspx el cual es un formulario web que contiene etiquetas de tipo HTML y XML el cual nos sirve para presentar la informacion a nuestro usuario. En esta ventana Visual Studio nos muestra lo que contiene Default.aspx que es la estructura basica de una aplicacion web.

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="Presentacion._Default" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title>Página sin título</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>

    </div>
    </form>
</body>
</html>

Ahora apartir de esto empezaremos a agregar los elementos que necesitaremos para nuestra ultima capa, Para empezar cambiaremos el titulo de la pagina modificandole el title, le pondremos Tres Capas como titulo como se muestra acontinuacion

<title>Tres Capas</title>

dentro de la etiqueta <div> agregaremos una etiqueta llamada lblMensaje la cual se encargara de darle informacion a nuestro usuario de lo que esta sucediendo con nuestro programa.

<div>
  <asp:Label ID="lblMensaje" runat="Server" ForeColor="red" EnableViewState="False"/>
</div>

Despues de haber agregado nuestra etiqueta debajo de ella agregaremos una tabla la cual contendra 7 filas.

        
<asp:Label ID="lblMensaje" runat="Server" ForeColor="red" EnableViewState="False"/>
<table style="border:2px solid #cccccc;">
  <tr></tr>
  <tr></tr>
  <tr></tr>
  <tr></tr>
  <tr></tr>
  <tr></tr>
  <tr></tr>
</table>

Se escribiran acontinuacion el contenido de cada fila de la tabla.

Fila 1: A esta fila por ser el encabezado se le cambiara el estilo, tendra el fondo azul y color de letra blanco, y se expande a lo largo de toda la tabla ocupando las 3 columnas que contendra nuestra tabla, en el encabezado contrendra el mensaje de Agregar Registros

<tr style="background-color:#507CD1;color:White;">
  <th colspan="3">Agregar Registros</th>
</tr>

Fila 2: Esta fila contendra tres columnas identificadas por la etiqueta <td> en la primera columna se mostrara el mensaje Nombre para hacer referencia a el parametro necesario para obtener el nombre, en la segunda columna, se colocara un textbox para que el usuario introduzca el nombre a guardar en la base de datos el cual tendra el nombre de txtNombre, la ultima columna contiene un validador de nombre val1 que tendra la funcion de avisar al usuario que ha cometido un error al ingresar datos en txtNombre.

<tr>
  <td>Nombre:</td>
  <td>
    <asp:TextBox ID="txtNombre" runat="Server"></asp:TextBox>
  </td>
  <td>
    <asp:RequiredFieldValidator ID="val1" runat="Server" Text="*" ControlToValidate="txtNombre"
         Display="dynamic"></asp:RequiredFieldValidator>
  </td>
</tr>

Fila 3: Al igual que la fila anterior tiene 3 columnas, en la primera columna el mensaje nombre en la segunda un textbox el con el nombre de txtApellido el cual nos provee de el apellido a guardar en la base de datos y por ultimo en la columna 3 un validador de nombre val2 el cual se encarga de verificar que el usuario indroduzca valores correctos en txtApellido.

<tr>
  <td>
    Apellido:
  </td>
  <td>
    <asp:TextBox ID="txtApellido" runat="Server"></asp:TextBox>
  </td>
  <td>
    <asp:RequiredFieldValidator ID="val2" runat="Server" Text="*" ControlToValidate="txtApellido"
          Display="dynamic"></asp:RequiredFieldValidator>
  </td>
</tr>

Fila 4: Esta fila en su columna 1 contiene el mensaje Edad, en la segunda columna se encuentra un textbox de nombre txtEdad el cual es mas pequeño que los textbox anteriores por su propiedad columns, en la ultima columna se encuentra un validador de nombre val3 este validador verifica que el usuario solo ingrese numeros en el textbox txtEdad, al ocurrir este error se le presenta al usurario un mensaje de error.

<tr>
  <td>
    Edad:
  </td>
  <td>
    <asp:TextBox ID="txtEdad" runat="Server" Columns="4"></asp:TextBox>
  </td>
  <td>
    <asp:RequiredFieldValidator ID="val3" runat="Server" Text="*" ControlToValidate="txtEdad"
       Display="dynamic"></asp:RequiredFieldValidator>
    <asp:CompareValidator ID="Comp" runat="Server" Text="Solo Enteros" ControlToValidate="txtEdad"
       Operator="DataTypeCheck" Type="Integer"></asp:CompareValidator>
  </td>
</tr>

Fila 5: La fila cinco contendra dos botones uno nos servira para enviar la informacion recolectada de los textbox y enviarla a la base de datos el otro boton nos servira para recibir todos los registros contenidos en la base de datos los cuales tendran un evento OnClick llamados Agregar y gvMostrar respectivamente.

<tr>
  <td>&amp;nbsp;</td>
  <td>
    <asp:Button ID="btnEnviar" runat="server" Text="Enviar" OnClick="Agregar" />
  </td>
  <td>
  <asp:Button ID="Load" runat="server" Text="Mostrar" OnClick="gvMostrar" />
  </td>
</tr>

Fila 6:Esta fila solo servira para separar a los botones de la fila 5 con el gridview de la fila 7.

          
<tr>
  <td/>
</tr>

Fila 7: En esta fila se encuentra el GridView que contendra los datos que previamente se habran ido agregando a nuestra base de datos. En este GridView se tienen que identificar los nombres de los campos que se quieren mostrar en la propiedad BoundField DataField y en la propiedad de HeaderText tenemos el nombre de el campo a mostrar en nuestra aplicacion.

<td colspan="3" align=center>
  <asp:GridView ID="GridView" runat="server" AutoGenerateColumns="false">
    <Columns>
      <asp:BoundField DataField="id" HeaderText="Id" />
      <asp:BoundField DataField="strNombre" HeaderText="Nombre" />
      <asp:BoundField DataField="strApellido" HeaderText="Apellido" />
      <asp:BoundField DataField="intEdad" HeaderText="Edad" />
    </Columns>
  </asp:GridView>
</td>

Con lo anterior definido, hemos completado la Interface de usuario, el codigo completo se presenta acontinuacion asi como la ilustracion de como debe quedar.

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="Presentacion._Default" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
  <title>Tres Capas</title>
</head>
<body>
  <form id="form1" runat="server">
  <div>
    <asp:Label ID="lblMensaje" runat="Server" ForeColor="red" EnableViewState="False"/>
    <table style="border:2px solid #cccccc;">
      <tr style="background-color:#507CD1;color:White;">
        <th colspan="3">Agregar Registros</th>
      </tr>
      <tr>
        <td>
          Nombre:
        </td>
        <td>
          <asp:TextBox ID="txtNombre" runat="Server"></asp:TextBox>
        </td>
      </tr>
      <tr>
        <td>
          Apellido:
        </td>
        <td>
          <asp:TextBox ID="txtApellido" runat="Server"></asp:TextBox>
        </td>
        <td>
          <asp:RequiredFieldValidator ID="val2" runat="Server" Text="*" ControlToValidate="txtApellido" 
               Display="dynamic"></asp:RequiredFieldValidator>
        </td>
      </tr>
      <tr>
        <td>
          Edad:
        </td>
        <td>
          <asp:TextBox ID="txtEdad" runat="Server" Columns="4"></asp:TextBox>
        </td>
        <td>
          <asp:RequiredFieldValidator ID="val3" runat="Server" Text="*" ControlToValidate="txtEdad" 
               Display="dynamic"></asp:RequiredFieldValidator>
          <asp:CompareValidator ID="Comp" runat="Server" Text="Solo Enteros" ControlToValidate="txtEdad" 
               Operator="DataTypeCheck" Type="Integer"></asp:CompareValidator>
        </td>
      </tr>
      <tr>
        <td>&amp;nbsp;</td>
        <td>
          <asp:Button ID="btnEnviar" runat="server" Text="Enviar" OnClick="Agregar" />
        </td>
        <td>
          <asp:Button ID="Load" runat="server" Text="Mostrar" OnClick="gvMostrar" />
        </td>
      </tr>
      <tr>
        <td/>
      </tr>
      <tr>
        <td colspan="3" align=center>
          <asp:GridView ID="GridView" runat="server" AutoGenerateColumns="false">
            <Columns>
              <asp:BoundField DataField="id" HeaderText="Id" />
              <asp:BoundField DataField="strNombre" HeaderText="Nombre" />
              <asp:BoundField DataField="strApellido" HeaderText="Apellido" />
              <asp:BoundField DataField="intEdad" HeaderText="Edad" />
            </Columns>
          </asp:GridView>
        </td>
      </tr>
    </table>
  </div>
  </form>
</body>
</html>

Para realizar la programacion de esta parte primero necesitamos agregar la referencia de nuestra capa de negocio, al igual que lo hicimos en la capa anterior.

Seleccionaremos la capa de presentacion y le daremos un click derecho en referencias despues elegiremos agregar referencia

En esta ventana seleccionaremos la pestaña de Proyectos donde nos aparecera la capa de Negocios y la capa de Datos que ya hemos creado, seleccionamos la capa de Negocios y aceptamos.

Ahora debemos concluir nuestro programa, para esto solo basta con modificar el codigo que detras de nuestra interface, para ello nos dirigimos a el explorador de soluciones seleccionamos nuestro proyecto presentacion dentro de el encontraremos el archivo Default.aspx el cual modificamos anteriormente pero solo la parte de diseño ahora modificaremos el codigo que realizara lo antes planteado, seleccionamos Default.aspx le hacemos un click derecho y seleccionarmos Ver Codigo el cual nos llevara a el codigo detras de nuestra pagina.

Antes de empezar a escribir nuestro codigo necesitamos agregar la referencia de nuestra capa de Negocio, para ello agregaremos la referencia

using Negocio;

Enseguida agregaremos una clase llamada Agregar la cual es un evento del botón Enviar de que se encuentra en la fila 5 de nuestra, esta clase sera la encargada de realizar todo el proceso de insertar un registro en la base de datos, utilizando todo lo que hemos construido hasta ahora.

Esta clase funciona de la siguiente manera, verifica que los datos ingresados estén correctos de lo contrario se aborta y sale de la ejecución, en caso de que no se encuentren errores, se crea una instancia de la clase AccesoLogica que proviene de nuestra capa de Negocios esta instancia se le da el nombre de negocio, después se asigna todos los contenidos de los textbox en una variable los cuales posteriormente nos sirven para pasar los parámetros requeridos para una inserción en nuestra capa de negocio por medio de su método insert el cual devuelve un resultado, el cual sera negativo en caso de que ocurra un error en la base de datos. y a continuacion se manda un mensaje por medio de la etiqueta lblMensaje en caso de que exista o no error en la inserción, por ultimo se libera la memoria de la instancia negocio.

protected void Agregar(object sender, EventArgs e)
        {
            if (!Page.IsValid)
                return;
            AccesoLogica negocio = new AccesoLogica();
            string nombre = txtNombre.Text;
            string apellido = txtApellido.Text;
            int edad = Int32.Parse(txtEdad.Text);
            int resultado = negocio.Insert(nombre,apellido,edad);
            if (resultado > 0)
                lblMensaje.Text = "Nuevo Registro Agregado Satisfactoriamente.";
            else
                lblMensaje.Text = "Nombre:  [<b>" + txtNombre.Text + "</b>] ya existe, agrege otro";
            negocio = null;
        }

Ahora agregaremos otra clase llamada gvMostrar la cual al igual que la anterior se ejecutara al hacer click en el botón Mostrar, esta clase tendrá la tarea de llenar el GridView con los datos contenidos en la base de datos, para ello obtiene sus datos de la clase proveniente AccesoLogica llamada ObtenerEmpleados, el cual se le asigna como DataSource a nuestro GridView y después se le liga a el GridView con la función DataBind, por ultimo se deshace de todos los datos contenidos en los textbox

        protected void gvMostrar(object sender, EventArgs e)
        {
            GridView.DataSource = AccesoLogica.ObtenerEmpleados();
            GridView.DataBind();
            txtEdad.Text = txtNombre.Text = txtApellido.Text = "";
        }

Ahora si deseamos ver la información contenida en nuestra base de datos, al momento que ingresemos a nuestra pagina debemos agregar algo de codigo a nuestra clase Page_Load la cual C# nos ha proporcionado por defecto a la hora de crear un proyecto ASP, esta clase se ejecuta justo antes de que la pagina se muestre, por ello si colocamos algo en esta clase, esto aparecera al momento de cargar la pagina.

En esta clase solo agregamos una linea de codigo, en la cual nos referiremos al evento gvMostrar el cual hemos realizado anteriormente, y lo utilizaremos para mostrar la informacion contenida en nuestra base de datos.

protected void Page_Load(object sender, EventArgs e)
        {
            if(!Page.IsPostBack)
                gvMostrar(sender, e);
        }

A continuacion el codigo completo de la capa de presentacion.

Con esto concluimos nuestro proyecto. pero antes de ejecutar nuestro proyecto por primera vez debemmos establecer la capa de presentacion como proyecto de uni

About these ads
 
99 Comments

Posted by on June 19, 2011 in C# asp.net

 

99 responses to “Programacion en tres capas en C# usando asp.net

  1. nelson

    October 31, 2011 at 6:47 am

    muy pero muy buena esplicacion mejor no podia ser

     
    • programaspasoapaso

      October 31, 2011 at 7:29 am

      gracias por tu comentario, si necesitas ayuda, solo hazmelo saber

       
  2. Abraham

    November 24, 2011 at 8:28 pm

    Hola antes que nada buen tutorial aunque, tengo unas dudas ojala me pudieras ayudar a despejar las en la capa de datos ahi se mapean todas las tablas que usare, igual en la capa de negocio y en la capa de presentación irian todas las aspx que usare ó necesito hacer una capa de negocio y datos por cada aspx que yo tenga?????. Gracias y saludos.

     
    • programaspasoapaso

      November 25, 2011 at 4:27 am

      Solo necesitas crear mas objetos clases o metodos en los proyectos ya existentes.
      Digamoslo de esta manera. puedes extender cada capa como tu desees.

      por ejemplo para consultar, modificar y eliminar, necesitas crear sus metodos en datos, negocio y presentacion.

      Espero te haya entendio.
      Si necesitas algun ejemplo hazmelo saber.

       
  3. Abraham

    November 25, 2011 at 2:58 pm

    Exactamente esa era mi duda, creo que si me vendria bien un ejemplo, si fueras tan amable de realizar uno te lo agradeceria mucho. Gracias y saludos.

     
  4. Sergio

    December 10, 2011 at 3:16 am

    Hola, ya hice parte del programa pero en la parte de agregar la referencia de Datos para usar AccesoDatos me marca un error el cual dice que no existe en el contexto actual y manda otro error que dice que no se puedo encontrar que esta perdida el using o la referencia del ensamblado cuando ya he agregado la referencia ¿porque me salen estos errores? gracias.

     
    • programaspasoapaso

      December 10, 2011 at 8:09 pm

      muy probablemente es error de acceso, verifica que tu clase de AccesoDatos se encuentre como pulbic.

       
  5. Luis

    March 28, 2012 at 7:47 pm

    Muy buen material, lo probe con windows form y tambien funciona, soy nuevo en esto la pregunta es como seria si usaria un combo box el cual estrae datos de otra tabla???

    Igual muchisimas Gracias….

     
    • programaspasoapaso

      March 28, 2012 at 9:58 pm

      Muy facil solo haz otro metodo parecido a obtenerEmpleados pero en el query ingresale el select de tu otra tabla, despues en tu capa de Negocio accesoLogica haces lo mismo que en obtener empleados, ya que tienes eso solo lo ligas a tu combobox, creo que la sintaxis es: suponiendo que tu combobox se llama cbx, tu metodo en accesoLogica se llama obtenerDatos y tu consulta es “select datos from Empleados”, seria cbx.DataSource = AccesoLogica.ObtenerDatos(); cbx.ValueMember = “datos”; espero te sirva, si tienes alguna duda aqui estamos para ayudarte.

       
  6. Julio Guaraca

    May 16, 2012 at 5:18 pm

    hola he seguido el tutorial al pie de la letra y me corre la pagina web pero no consigo registrar datos.

     
  7. programaspasoapaso

    May 16, 2012 at 5:41 pm

    Si lo deseas te puedo mandar el codigo fuente. puedes ponerme un correo donde te lo pueda enviar.

     
    • Wilson Estacio

      March 19, 2013 at 2:41 am

      Por favor me puedes enviar el codigo fuente con*******n@hotmail.com

       
  8. Aquiles

    June 5, 2012 at 6:57 pm

    Hola, super bueno tu código, pero igual que al otro amigo, sigo los pasos, pero no consigo insertar los datos.

     
    • programaspasoapaso

      June 5, 2012 at 11:06 pm

      Gracias por tu comentario, Verificare cada uno de los pasos, regresa la semana siguiente.

       
      • programaspasoapaso

        June 6, 2012 at 7:08 am

        Listo se ha realizado la verificación, falto una sola linea en el Page_Load, la cual realizaba una limpieza de los textbox en cada evento.
        la linea es if(!Page.IsPostBack) la cual se encarga de cargar el grid de consultas solo la primera vez que se ingresa a la pagina.

         
  9. Gianina

    June 19, 2012 at 6:39 pm

    hola!! muy bueno .. me ayudo mucho pero x ahy me salen unos incovenientes crees q podrias enviar a mi correo el proyecto :)
    … spero q si gracias!!

     
    • programaspasoapaso

      June 19, 2012 at 7:32 pm

      Lo he mandado ten en cuenta que deberas agregar tu informacion en la cadena de conexion, ademas de tener tu base de datos lista.

       
  10. Little Shawn

    July 25, 2012 at 7:34 pm

    Hola que tal, cómo podrías obtener la cadena de configuración a la Bd desde el web.config? Esto debido a que no son los mismos datos en el ambiente de desarrollo que el de producción.

     
  11. Rolando Izaak Ramos

    August 2, 2012 at 4:31 pm

    Buenas, no me podrias mandar el codigo del ejemplo, esta excelente la explicacion pero me gustaria verlo con mas detalle… Una pregunta, usas procedimientos almacenados?

     
    • programaspasoapaso

      August 2, 2012 at 9:55 pm

      Ya lo mande a tu correo, respecto a la pregunta, te recomiendo que lo leas detenidamente la parte de base de datos esos detalles están bien descritos ahí.

       
  12. ignacio martinez

    August 17, 2012 at 1:34 pm

    Buenas si lo quiero hacer en Visual Studio 2010 no hay problemas es que estoy comenzando a programar en este lenguaje. saludos

     
    • programaspasoapaso

      August 18, 2012 at 12:28 am

      Es practicamente lo mismo, el unico cambio considerable es la capa de presentacion, en especifico el marcado.
      Las funciones, las capas, todo el codigo detras lo que es C# funciona de la misma manera, solo pon especial atencion en los elementos que integran el ASP de VS2010, es casi lo mismo pero si existen algunas diferencias.

       
  13. Victor

    August 26, 2012 at 9:21 pm

    Muy buen tutorial te felicito!!!,yo practicamente uso la misma estructura lo unico que uso deferentes es una capa de Entidades(Con sus respectivos metodos GETs ty SETs) la cual uso para trasportar los datos Ejem:

    String nombreMarcaP = “Honda”;

    marcaP = new Marca(nombreMarcaP);

    cantRegiAfec = mMarca.registrarMarca(marcaP);//aqui invoco mi metodo insert y envio mi objeto con mis datos

    En el metodo propiamente lo que inserto son los atributos del objeto(Sacado medianes sus respectivos metodos Gets)

    Que opinas? es mas “ordenado” tener una capa de entidades? o mas bien me estoy complicando la existencia?

    Es que mas me beneficia esto?

     
    • programaspasoapaso

      August 27, 2012 at 3:54 am

      Muy bueno tu comentario, de hecho yo igual lo realizo de la manera que mencionaste, pero este ejemplo es muy sencillo seria otra capa, y trabajo extra por la simplicidad, pero en proyectos mas grandes es necesario, para simplificar las cosas, talvez en el futuro haga un ejemplo de eso. pero sencillo para evitar hacer tan largo el tutorial, gracias por tu aporte….

       
  14. Renzo

    September 4, 2012 at 8:06 pm

    Hola buen aporte para aprender un poco mas sobre capas: Tengo una consulta ojala y me ayudes con esta yo s evb.net pero ahora queria pasar una clase que tenia sobre capas de vb.net a c# pero tengo varios problemas ya que en mi capa de negocio en vb.net yo lo hago con interfaces y despues estas se implementan en una capa DAO en su respectiva clase pero cuando lo hago en c# para implementar estas interfaces tengo que escribirlas una por una no t lo autocompleta como en vb.net no se si sabes alguna otra manera de hacerlo. Muy parte de eso tambien declaro un Event Mensaje(string msg) en mi interface de vb.net pero en c# ya he probado con delegados y event para hacer un mantenimiento el problema es que me agrega y todo pero nunca sale el mensaje ojala puedas realizar algunos ejemplos de interfaces y eventos en c#

     
    • programaspasoapaso

      September 4, 2012 at 10:31 pm

      Intentare realizar un post sobre interfaces e implementarlas para guardar informacion sobre el usuario y asi no usar variables de sesion.
      En cuanto este listo te mando un correo. Saludos.

       
  15. Joel Mora

    September 17, 2012 at 3:44 am

    Que tutorial tan excelente nunca habia visto algo tan bien explicado y menos de esto en 3 capas, yo estuve sigiendo paso paso aun que yo la conexion la hice a MySql y solo fueon cambios en unas instrucciones, pero todo jalo genial no trono en nada, FELICITACIONES que bueno eres para explicar.

    Saludos…

     
    • Topo

      June 7, 2013 at 4:50 pm

      Hola como estas me podrias enviar el tuyo en MySQL? muchas gracias!

       
      • programaspasoapaso

        June 7, 2013 at 9:05 pm

        Por el momento no puedo adaptarlo, pero es muy parecido el código.

        Los pasos para conectarse son simples, aqui te dejo un link y en cuanto a los scripts de bd, tendras que adaptarlos a MySQL, no cambia mucho pero puede tener sus diferencias,

        http://dev.mysql.com/doc/refman/5.1/en/connector-net-visual-studio-making-a-connection.html

         
      • Topo

        June 7, 2013 at 9:08 pm

        Ok gracias por responder, el problema que estoy teniendo ahora es con el &gt de la sentencia if(resultado >0) que me dice que no existe en el contexto actual, y ya agregue las referencias y ademas el using.. alguna pista?

         
      • programaspasoapaso

        June 7, 2013 at 9:19 pm

        Tienes razón existe un error con el formato que le da el wordpress, se quedo el “&gt”; que debería ser un >, gracias por ayudar a depurar el código.

         
      • Topo

        June 7, 2013 at 9:33 pm

        buenisimo!!!! ahora lo que no me anda es la coneccion a la base, tengo que instalar algo mas ademas del SQL server 2005, tengo la base andando, cree los stores procedures, la tabla anda todo, hay que instalar un adaptadro como el de Mysql y referenciar alguna dll?

         
      • programaspasoapaso

        June 7, 2013 at 9:43 pm

        Checa bien la cadena de conexión a la base de datos,
        no necesitas instalar nada extra, con las bibliotecas descritas en este tutorial debería funcionar.

        Cual es el problema?? no vez los datos? o te manda un error?

         
      • Topo

        June 7, 2013 at 9:45 pm

        me da este error: ExecuteReader: CommandText property has not been initialized en la seccion MetodoDatos.cs – public Static DataTable ( te comento que le agregue para que al levantar muestre los datos de la base y tengo al menos un registo para msotrar.

         
      • programaspasoapaso

        June 7, 2013 at 9:59 pm

        Si las bibliotecas using System.Data.SqlClient;
        using System.Data; estan declaradas, el problema deberia ser tu consulta a la base de datos.

        Primero verifica en SQL Server que funcione y despues la colocas en el _comando.CommandText.

         
      • Topo

        June 7, 2013 at 10:19 pm

        ANDA!!! sos un genio!!! ahora te comento, habia dejado la linea del SELECT comentada porque queria ver si podia agregarle un Where para que la busqueda sea por un criterio pero no me salio… no se como pasarle la referencia..

         
      • programaspasoapaso

        June 7, 2013 at 10:31 pm

        Eso es mas fácil, te comento…

        En otro post
        http://programaspasoapaso.wordpress.com/2011/11/26/ejemplo-de-aplicacion-usando-programacion-en-tres-capas/
        realice varios where, revisa el metodo verificarUsuario.

        en especifico la linea

        “SELECT usuario FROM usuarios WHERE usuario = ‘”+usuario+”‘ AND password = ‘”+pass+”‘”;

        en ese post te puedes dar una idea clara de lo que quieres realizar, ese post no esta terminado pero es muy entendible para lo que deseas realizar.

         
  16. C&Y

    September 25, 2012 at 6:02 pm

    Hola mui buen tutorial, sera que me podrias enviar tu proyecto a mi correo xq tmb me aparecen algunos detallitos, y no se si puedo trabajarlo en 2010

     
  17. Luis Algarra

    September 30, 2012 at 12:55 am

    Exelente tutorial aunque me hubiese gustado que usara wpf tambien para saber como implementarlo en aplicaciondes de escritorio
    me podrias mandar el codigo del ejemplo para verlo mas detalladamente y ver si puedo aplicarlo en wpf

    gracias

     
    • programaspasoapaso

      September 30, 2012 at 2:17 am

      Enviado, es exactamente lo mismo, lo bueno de este modelo es que puedes usar como presentacion de escritorio o web, ademas de que si lo desearas tambien podrias escoger otro gestor de base de datos, eso es lo que te proporciona hacerlo en capas. En cuanto al wpf, no tengo mucha experiencia ese si lo tendre que rechazar por el momento.

       
  18. blogdejosem

    October 9, 2012 at 7:47 am

    Antes que nada, felicidades por el tutorial, muy completo y muy detallado con todos los comentarios y capturas.
    Después de terminarlo me surge una duda:
    Al método ObtenerEmpleados le he añadido un parámetro para obtener un empleado dado el ID, ahora bien, si el usuario me proporciona un ID inválido, ¿Dónde haría esta comprobación?
    Gracias.

     
    • programaspasoapaso

      October 9, 2012 at 8:02 am

      Muy buena tu observacion, mira en ese caso
      cambias o agregas (jejeje, la ventaja de las capas) en el negocio.

      public static string ObtenerEmpleados(int id)
      {
      try
      {
      DataTable tabla = AccesoDatos.ObtenerEmpleados(id);
      return tabla.Rows[0][0].ToString();
      }
      catch
      {
      return “No existe ese empleado”;
      }
      }

      demaciado facil para ser verdad, Saludos

       
      • blogdejosem

        October 9, 2012 at 9:53 am

        Gracias por la respuesta, pero en el ejemplo que he hecho, además de pasarle el ID, utilizo LINQ, y en lugar de devolver un DataTable, devuelvo un IQueryable, ¿sábes cómo podría hacerlo en este caso?
        Gracias

         
      • programaspasoapaso

        October 9, 2012 at 2:34 pm

        Para ser honesto no los he utilizado, pero no es tanto problema la idea es tomar el primer elemento y si no contiene primer elemento en caso de no haber primer elemento se manda un mensaje de advertencia

        para obtener el primer elemento puedes consultar la siguiente pagina ahi te puedes dar una idea de como realizarlo.
        http://stackoverflow.com/questions/1869304/determine-the-position-of-an-element-in-an-iqueryable

         
  19. blogdejosem

    October 9, 2012 at 3:46 pm

    Determinar si la consulta devuelve un resultado no es problema, puedo utilizar el método Any(), que hace exactamente eso. El problema lo tengo cuando la consulta sí devuelve resultados, que no sé cómo mostrar el string generado en un GridView

     
    • programaspasoapaso

      October 9, 2012 at 4:23 pm

      Pues si estas regresando un string entonces no deberias usar gridview,
      Pero si necesitas hacerlo, deberias regresar el Iqueryable intego a la presentacion, al regresar el Iqueryable verificas que tenga datos, si tiene, los muestras, si no pues escondes el gridview, espero te haya ayudado, Saludos

       
      • blogdejosem

        October 9, 2012 at 8:37 pm

        Sí, necesito mostrar un GridView :S. El IQueryable lo paso íntegro a la presentación, el problema es que si me llega un parámetro inválido a la función de la capa de datos, me lanza un error en la capa datos, que es donde está la función que recibe el parámetro, necesito poner el control ahí, he intentado devolver un IQueryable vacío, pero no doy con la función apropiada para hacerlo.

         
      • programaspasoapaso

        October 9, 2012 at 10:13 pm

        Se exactamente cual es tu problema, es mas de logica que de capas,

        Pero mira, lo que puedes hacer es verificar antes de mandar el query si hay registros o no! depende de eso si usas el grid o no!

        por ejemplo!
        if (existen datos)
        {
        llenar grid
        }
        else
        {
        crear un list predeterminado que contenga el mensaje de error y llenar el grid con el
        }

        Espero te ayude!

         
  20. blogdejosem

    October 30, 2012 at 11:19 am

    Muchas gracias por la ayuda, al final he dejado un poco de lado LINQ para cuando tenga tiempo de investigar y estoy utilizando SqlDataSource.
    En lugar de montar la consulta completa en la capa de Datos, creo un procedimiento al que le paso un SqlDataSource y una condicion y filtro utilizando SelectParameters.
    La comprobación de si la consulta devuelve o no datos la hago en la capa de aplicación.
    De nuevo, gracias por tu seguimiento ;-)

     
  21. jesus armando macias benitez

    November 6, 2012 at 4:35 pm

    Disculpa me marta error en la clase AccesoDatos.cs en la cadena

    @”Data Source=???;Initial Catalog=Empleados;User ID=sa;Password=???”;

    y tambien puse los valores de conexion que tengo con SQLServer…

     
    • programaspasoapaso

      November 6, 2012 at 6:31 pm

      Verifica que las comillas sean " y no ” un error muy comun y de formato en wordpress, seguramente ese es el error, mucha suerte, Saludos

       
  22. Angel

    November 12, 2012 at 5:59 pm

    Hola, me puedes hacer el favor de enviarme el código fuente, cosa que te agradecería. mi email es b*****8@hotmail.com, gracias.

     
  23. Juzas

    November 15, 2012 at 7:36 pm

    Excelente aporte muchas gracias mi buen!!! soy tu fan si nos compartes mas de tu conocimiento haber como me enteras. Gracias de nuevo!!!

     
    • programaspasoapaso

      November 15, 2012 at 7:38 pm

      Gracias por darte el tiempo de comentar!, estare posteando pronto, estoy preparando mas aportes, solo necesito el tiempo para editar!

       
  24. Danielmrsud

    November 16, 2012 at 2:50 am

    Super bueno tu post, anduve buscando algo así por todos lados pero por fin me encontré con esta pagina super bueno, se agradecería que subieras uno mas completo con delete y update, si tiene unos así te agradecería que me los enviaras a mi correo, lo que pasa que me estoy preparando para mi examen de titulo. saludos!!

     
    • programaspasoapaso

      November 19, 2012 at 6:18 pm

      Es algo que he querido terminar pero necesito algo de tiempo. Gracias por tu comentario.

       
  25. Hector

    November 20, 2012 at 9:17 pm

    Estimado muy buena la explicacion de como trabajar en mvc ahora bien queria saber si es que serias tan amable de enviarme este mismo proyecto ??

    saludos y sigue aportando de esa manera :)

     
    • programaspasoapaso

      November 20, 2012 at 9:53 pm

      Gracias por tu comentario, He enviado la aplicacion, Saludos.

       
  26. rens

    November 22, 2012 at 10:41 am

    me interesa tu ejemplo te dejo mi coorreo re****40@hotmail.com

     
    • programaspasoapaso

      November 22, 2012 at 3:43 pm

      Gracias por tu comentario, He enviado la aplicacion, Saludos.

       
      • Antony

        December 8, 2012 at 6:27 am

        Excelente tutorial , muy bien explicado mis Respetos….
        a mi me corrio ala perfeccion , haora lo me falta agregarle los Elimnar,Actulizar, y a lo mejor buesquedas con `parametros ………………..Gracias Man muy bien explicado…..

         
  27. Enzo

    December 11, 2012 at 4:19 am

    Muy buen tutorial, se agradece lo detallado de las explicaciones.

     
  28. Danilo

    December 27, 2012 at 9:35 pm

    Te pasaste esta muy bien explicado.
    te agradecería si me puedes enviar el proyecto porfa.

    saludos y gracias

     
  29. Jonathan Mamani Chuquimaco

    January 6, 2013 at 4:40 am

    el ejenplo esta chevere per solo un detalle es que no me valida no se si yo lo abre copiado mal pero lo revise varias veses y lo veo exacto pero buneo me podrias decir en qu etoy fallando porfavor ingresa los mismos nombres
    grasias de verdad grasias
    y si tuvieras mas ejemplos de tres capas con todo (insertar,modificar,eliminary buscar ) te lo agrdeeria vastante
    es qyue de verdd nesecito aprender esto de veras
    grasias nuevamente

     
    • programaspasoapaso

      January 8, 2013 at 4:52 am

      Empezare mañana a terminar lo que empece, solo dame un poco de tiempo y terminare la aplicacion en 3 capas. Gracias por tu comentario.

       
  30. Edwin

    January 20, 2013 at 4:46 am

    muy buen ejemplo y funciona que es lo mas importante, me gustaria saber como llamar a la aplicacion al momento de colgarala en els servidor IE ya qu la solucion TresCapas es la que contiene a la capa presentación que tiene la pagina aspx, he probado llamando a la carpeta presentación directamente asi como a la carpeta tresCapas

     
  31. Juan Luis

    January 23, 2013 at 4:26 pm

    por favor si me podrias mandar el proyecto por favor, muchas gracias de antemano

     
  32. OscarSade

    February 6, 2013 at 12:03 am

    Hola y gracias por publicar este tipo de proyectos, son de gran ayuda, excelente explicación.
    Solo tengo una duda la cual radica en la cadena de conexión, En data source es el servidor, en el initial catalog es la bd y si no tengo user ni password, ya que se conecta con Windows authentication, que debo de poner o no poner??

    gracias

     
    • programaspasoapaso

      February 6, 2013 at 6:31 am

      Hola gracias por tu comentario, ya investigue y parece ser que solo tienes que agregar Trusted_Connection=true or Integrated Security=SSPI a la cadena en vez de el usuario y el password te dejo el link por si tienes dudas.

      Link cadena de coneccion

      Saludos.
      En breve actualizo el post, gracias por ayudar a mejorarlo

       
      • OscarSade

        February 6, 2013 at 6:11 pm

        Gracias, ya esta listo.
        Tu página es genial, como haces esos estilos?
        cool!

         
  33. jesusmax9

    February 20, 2013 at 1:59 pm

    Hola excelente tutorial, podrias ayudarme con un tutorial donde uses capas y Crystal Reports, te lo agradeceria muchisimo.

     
    • programaspasoapaso

      February 20, 2013 at 6:35 pm

      Mira es muy buena tu observacion, me consumiria muchisimo tiempo, pero es posible.
      Exactamente que necesitas, te podria ayudar a aclarar tus dudas, o si lo prefieres puedes esperar a el tutorial seria demaciado tiempo alrededor de un mes por que ya se me estan apilando las ideas.

       
  34. OscarSade

    February 26, 2013 at 4:16 pm

    Hola espero que puedas ayudarme, tengo un problema al insertar datos con un programa similar a este, pero la diferencia que la insercción de datos es dinámica, ya que tengo un stored procedure que hace referencia a parametros, los cuales son los registros que debo de introducir a una tabla cualesquiera, podrias hacer un tutorial parecido a lo que te menciono. Gracias

     
    • programaspasoapaso

      February 26, 2013 at 6:17 pm

      Mi mayor duda es, si insercion dinamica es en el servidor o en la aplicacion?? y podrias poner un ejemplo de eso?

       
  35. Dario Javier

    March 27, 2013 at 2:07 pm

    Hola que tal muy bueno excelente tu guia hermano…como te podras dar cuenta soy un novato en programacion pero me gustaria que pusieras un tutorial desde cero para conectar la bd sql con C#, desde como configurar sql para conexiones remotas, ya que tengo demaciados problemas al hacer eso…

     
  36. Alan Rios

    April 15, 2013 at 12:40 am

    Hola, realmente muy buen tutorial, mis mas sinceras felicitaciones por darte el tiempo de explicarlo detalladamente. Pero en verdad me gustaría saber como puedes hacer consultas. ejemplo: un pantallaso donde puedes buscar todas tus ventas registradas por filtro de fechas, por tipo de documento, por cliente; todo esa consulta en un pantallaso. realmente se programar en vb.net que es programación de escritorio y todo eso lo domino pero en programación web recién estoy empezando y quería saber si me podrías brindar ese ejemplo. Te dejo mi correo a*****4@hotmail.com . De ante mano muchas gracias.

     
    • programaspasoapaso

      April 15, 2013 at 5:14 am

      He mandado a tu correo el ejemplo de una aplicación en asp.net c# que he estado realizando desde hace tiempo, el cual se encuentra Aquí

      Espero te ayude en tu transición a ASP.NET.
      Saludos

       
  37. Amilkar

    May 10, 2013 at 1:24 am

    thank master!! muy buen ejemplo de programacion se te agradece mucho, …puedes subir mas post de asp por fa

     
  38. vanesa

    May 18, 2013 at 4:11 pm

    hola esta genial tu explicacion desde ya muchisimas gracias, serias tan amable de enviarme el proyecto a mi correo? saludos!

     
  39. richard

    May 20, 2013 at 2:21 am

    amigo eres un capo!! es posible que me envies el proyecto? si no fuera mucha la patudez roxhman@gmail.com te lo agradeceria recontramil!!

     
  40. Nikotwo

    May 29, 2013 at 8:51 am

    Genial tu explicación he leído bastante sobre este tema y solo a ti te entendí :D

    Saludos y gracias por compartir lo que sabes.
    PD: si puedes me mandas el archivo, te lo agradeceré aun mas :)

     
  41. el.ploss

    June 21, 2013 at 5:46 pm

    Gracia por el ejemplo, me ayudo mucho para entender la programación por capas.

     
  42. victor

    June 27, 2013 at 2:53 am

    Hola que tal, antes que nada muy buen ejemplo y explicación.
    Queria saber si tienes un ejemplo de sesiones, he tenido muchos problemas y dudas respecto a ese tema, ya que no me gustan usar los famosos membership y sus objetos de login que ya tiene visual studio 2010.
    si tienes alguno que no utilize estas características y que además se manejen roles de usuario, te lo agradecería mucho.
    saludos.

     
    • programaspasoapaso

      June 27, 2013 at 2:22 pm

      Si, ese seria el siguiente tutorial pero por el momento no puedo realizarlo, si te urge avisame y te mando un correo y te oriento para como realizarlo de lo contrario espera un tiempo a que lo redacte, Tambien tuve problemas cuando intente usar los membership de vs2010 por lo que use interfases y las sesiones de asp.

      Saludos

       
  43. Joel

    September 25, 2013 at 4:14 pm

    Excelente tutorial, había googleado bastante y solo encontraba cosas a medias, pero este blog es lo mejor que he encontrado, porque no lograba hacer una conexión a la BD y ejecutar procedimientos almacenados y con este tutorial lo logré.

    Solo quisiera pedirte si podes postear los métodos de Update y Delete, es que lo intenté pero no me funcionan.

     
  44. Andres

    November 9, 2013 at 8:34 pm

    Hola buno es muy buneo tu tutorial pero ami me sale un error utilizo el visual 2012 y Sql tambiem

    public static SqlDataAdapter createSqladapter(SqlCommand comando)
    {

    try
    {

    comando.Connection.Open();
    return comando.ExecuteNonQuery();// aqui comando.Executequery
    }

    catch{throw;}
    finally
    {
    comando.Connection.Dispose();
    comando.Connection.Close();
    }

    }

     
    • programaspasoapaso

      November 11, 2013 at 9:28 pm

      Me podrías enviar el error, no puedo darte mucha información con el codigo que me mandaste.

      Saludos.

       
  45. Henry Wendix

    November 24, 2013 at 7:18 am

    Excelente gracias por el aporte, lo acabo de terminar.

     
  46. Gerald

    March 12, 2014 at 11:37 pm

    hola muy buen tutorial pero me da error a la hora de mostrar los datos me podrias ayudar?

     
    • programaspasoapaso

      March 16, 2014 at 12:11 am

      Mandame el error, para saber con que nos estamos enfrentado. Saludos

       
  47. Mimi :D

    March 13, 2014 at 8:54 pm

    hola muy buen tutorial mee encanto :D oie una preguntota espero puedas responderme :D
    lo qe pasa es qe qiero insertar varios campos de diferentes tablas como le pongo en obtener empleado, en la clase acceso a datos…

     
    • programaspasoapaso

      March 16, 2014 at 12:12 am

      solo necesitas agregar mas parametros, es decir mas campos que acepta la clase, y estos colocarlos en la sentencia insert, esto lo podrias, revisar mi otro post que se llama ejemplo de aplicacion, ahi se muestra.

      Saludos

       

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

 
Follow

Get every new post delivered to your Inbox.

%d bloggers like this: