Programación, Tecnología y Más...

Programación, Tecnología y Más...

Insertar Registro a una BD desde un Formulario Web en C#

En este tutorial veremos como insertar un registro desde un formulario web en Asp.Net con C#.

Trabajaremos con una base de datos ejemplo que cree para este tutorial, la base de datos cuenta con una tabla llamada usuarios y contiene los campos cod_usuario (que es la llave primaria y es un campo auto incrementable), nombre, apellido, pais.
Ademas la base de datos cuenta con un procedimiento almacenado que utilizaremos para ingresar el registro
Descargar Base de Datos

Una vez que descargemos la base de datos la adjuntamos a nuestro SQL para continuar.

Lo primero que aremos es crear un nuevo sitio web vació as.pnet en visual estudio.

Proyecto asp.net

Una vez creado nuestro proyecto asp.net agregamos un webform el cual nos tiene que quedar con este diseño.

Diseño

Hecho esto nos vamos al código c# de nuestro formulario web y empezamos a programar nuestro formulario.

Lo primero que aremos sera añadir estas 2 referencias que nos sirven para trabajar con base de datos sql en asp.net
using System.Data.SqlClient;
using System.Data;


Ahora declararemos nuestra cadena de conexión a nivel de la clase con el fin de poder utilizarla en todos los eventos que programaremos.
//cadena de conexion la declaramos a nivel de la clase para utilizarla en todos los eventos.
SqlConnection cn = new SqlConnection("Data Source = .\\SQLEXPRESS; Initial Catalog = ejemplo; Integrated Security = True");

Ahora aremos un método donde cargaremos los datos al griedview de nuestra base de datos, el código va comentado para que entiendan todo.
public void cargardatos()
      {
          //hacemos la consulta a la base de datos
          SqlCommand cmd = new SqlCommand("Select * from usuarios", cn);
          //objeto adapter para hacer el enlace y llenado del dataset
          SqlDataAdapter adapter = new SqlDataAdapter();
          //asignamos la propiedad selectcommand al objeto command para que ejecute consulta
          adapter.SelectCommand = cmd;
          //abrimos la conexion
          cn.Open();
          //creamos objeto dataset
          DataSet objdataset = new DataSet();
          //llenamos el datable del dataset
          //el metodo fill obtiene los datos recuperados del dataadapter y los coloca dentro del dataset
          adapter.Fill(objdataset);
          //cerramos conexion
          cn.Close();
          //enlazamos los datos al griedvied
          GridView1.DataSource = objdataset;
          GridView1.DataBind();
      }

Ahora para que los datos que tenga la base de datos se carguen al momento de iniciar nuestro formulario web crearemos el método Load de nuestra webform y llamaremos al metodo que creamos anteriormente (el método Load sirve para cargar datos al momento que se inicializa el formulario)
protected void Page_Load(object sender, EventArgs e)
  {
      cargardatos();
  }


Por ultimo aremos el evento click de nuestro botón para que cuando el usuario presione el botón insertar los datos se inserten en la base de datos y se muestren en el griedview, aquí es donde aremos uso del procedimiento almacenado insertar usuarios. nuevamente el código esta comentado cada linea para que comprendan.
protected void Button1_Click(object sender, EventArgs e)
  {
          //utilizamos el procedimiento alamacenado insertarusuarios
          SqlCommand cmd = new SqlCommand("insertarusurios", cn);
          //especificamos que el comando es un procedimiento almacenado
          cmd.CommandType = CommandType.StoredProcedure;
          //creamos los parametros que usaremos
          cmd.Parameters.Add("@nombre", SqlDbType.VarChar);
          cmd.Parameters.Add("@apellido", SqlDbType.VarChar);
          cmd.Parameters.Add("@pais", SqlDbType.VarChar);
          //asignamos el valor de los textbox a los parametros
          cmd.Parameters["@nombre"].Value = TextBox1.Text;
          cmd.Parameters["@apellido"].Value = TextBox2.Text;
          cmd.Parameters["@pais"].Value = TextBox3.Text;
          //abrimos conexion
          cn.Open();
          //ejecutamos la instruccion con ExcecuteNonQuerry indicando que no retorna registros.
          cmd.ExecuteNonQuery();
          Label1.Text = "Usuario ingresado...";
          //cerramos conexion
          cn.Close();
          //cargamos los datos nuevamente
          cargardatos();
          //limpiamos los textbox
          TextBox1.Text = "";
          TextBox2.Text = "";
          TextBox3.Text = "";

  }


Para terminar les dejo el código completo así les tiene que quedar al final
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data.SqlClient;
using System.Data;

public partial class _Default : System.Web.UI.Page
{
      //cadena de conexion la declaramos a nivel de la clase para utilizarla en todos los eventos
      SqlConnection cn = new SqlConnection("Data Source = .\\SQLEXPRESS; Initial Catalog = ejemplo; Integrated Security = True");
   
  public void cargardatos()
      {
          //hacemos la consulta a la base de datos
          SqlCommand cmd = new SqlCommand("Select * from usuarios", cn);
          //objeto adapter para hacer el enlace y llenado del dataset
          SqlDataAdapter adapter = new SqlDataAdapter();
          //asignamos la propiedad selectcommand al objeto command para que ejecute consulta
          adapter.SelectCommand = cmd;
          //abrimos la conexion
          cn.Open();
          //creamos objeto dataset
          DataSet objdataset = new DataSet();
          //llenamos el datable del dataset
          //el metodo fill obtiene los datos recuperados del dataadapter y los coloca dentro del dataset
          adapter.Fill(objdataset);
          //cerramos conexion
          cn.Close();
          //enlazamos los datos al griedvied
          GridView1.DataSource = objdataset;
          GridView1.DataBind();
      }
  protected void Page_Load(object sender, EventArgs e)
  {
      cargardatos();
  }
       
  protected void Button1_Click(object sender, EventArgs e)
  {
          //utilizamos el procedimiento alamacenado insertarusuarios
          SqlCommand cmd = new SqlCommand("insertarusurios", cn);
          //especificamos que el comando es un procedimiento almacenado
          cmd.CommandType = CommandType.StoredProcedure;
          //creamos los parametros que usaremos
          cmd.Parameters.Add("@nombre", SqlDbType.VarChar);
          cmd.Parameters.Add("@apellido", SqlDbType.VarChar);
          cmd.Parameters.Add("@pais", SqlDbType.VarChar);
          //asignamos el valor de los textbox a los parametros
          cmd.Parameters["@nombre"].Value = TextBox1.Text;
          cmd.Parameters["@apellido"].Value = TextBox2.Text;
          cmd.Parameters["@pais"].Value = TextBox3.Text;
          //abrimos conexion
          cn.Open();
          //ejecutamos la instruccion con ExcecuteNonQuerry indicando que no retorna registros.
          cmd.ExecuteNonQuery();
          Label1.Text = "Usuario ingresado...";
          //cerramos conexion
          cn.Close();
          //cargamos los datos nuevamente
          cargardatos();
          //limpiamos los textbox
          TextBox1.Text = "";
          TextBox2.Text = "";
          TextBox3.Text = "";

  }
}


Capturas de la aplicación corriendo

Diseño
Diseño

Les dejo el proyecto de la aplicación también para que lo descarguen y lo prueben con visual estudio

Descargar Proyecto

Saludos desde El Salvador...

Si quieren donarme para una soda lo pueden hacer aqui.


Publicar un comentario

20 Comentarios

  1. Saludos... mira soy totalmente nuevo en esto del desarrollo de aplicaciones en ASP.NET y no me quedo muy claro lo que mencionas acerca de que una vez que descarguemos la BD - la adjuntamos a nuestro SQL para continuar-. Como hago esto te agradeceria bastante pudieras apoyarme con eso...

    ResponderEliminar
    Respuestas
    1. Con adjuntarla me refiero es que la agregues desde el magnament estudio de sql server la agregues desde el explorador de objetos ahi te aparece la opcion de adjuntar para que la bd se pueda usar

      Eliminar
  2. ah y respecto a procedimientos almacenados que guia me recomiendas para iniciarme en ese arte, se que son procedimientos que estan dentro de la base de datos que realizan consultas dentro de la misma pero que funcionan para practicamente casi cualquier lenguaje de programacion, pero pues no se como crearlos. gracias campeon!! :D

    ResponderEliminar
    Respuestas
    1. Pues acabo de crear un articulo sobre como hacerlo dale una leída y cualquier duda preguntas.
      Como crear Procedimientos Almacenados en Sql Server

      Eliminar
  3. Hola Cristian,

    Mil gracias por este post, muy bueno y me fué muy util, gracias por el tiempo dedicaco a compartir tu conocimiento.

    Suerte...

    ResponderEliminar
    Respuestas
    1. De nada, y pues me alegro que te allá servido ya que ese es el fin de todos mis artículos este fue uno de los primeros que publique por eso podes ver que hice uso de Dataset lo cual no lo recomiendo es mejor usar datatable o datareader o mejor aun clases entidad pero que bueno que te sirvió.

      Saludos.

      Eliminar
  4. podrias publicar para formularios simples, es decir no aplicaciones web sino de escritorio (desktop)

    ResponderEliminar
    Respuestas
    1. Hola amigo en el blog tengo bastantes ejemplos de aplicaciones windows tambien.

      Saludos.

      Eliminar
  5. Podrías explicarme como capturar un campo fecha desde un TextBox, tengo mi webforms pero cuando hago el insert me da error String was not recognized as a valid DateTime.
    En la pagina.aspx.cs lo tengo asi
    cmd.Parameters.Add("@fecha", SqlDbType.DateTime);
    y luego
    cmd.Parameters.Add["@fecha"] = DateTime.ParseExact("TextBox4.Text","dd/mm/yyy",null); //aqui me da error

    ResponderEliminar
    Respuestas
    1. Porque no usas el calendar de ajax para capturar la fecha.
      Calendar Demonstration

      Como veras es mas practico para el usuario solo seleccionar la fecha y entonces para hacer el insert solo arias.

      cmd.Parameters.Add("@fecha", Convert.ToDateTime(txtFechaNacimiento.Text));

      Saludos.

      Eliminar
    2. Gracias Cristian,
      Definitivamente es mucho mejor de la manera que tu me sugeriste y ademas es mas facil para el usuario.

      Saludos cordiales,

      Eliminar
    3. Así es amigo siempre tenes que buscar facilitarles la informacion a los usuarios.

      Saludos.

      Eliminar
  6. //utilizamos el procedimiento alamacenado insertarusuarios

    no entiendo esta parte de donde sacas este procedimiento o como se hace?

    ResponderEliminar
    Respuestas
    1. Hola Laura.

      Es un procedimiento almacenado creado en la base de datos para insertar un registro. Si no quieres usar procedimientos almacenados arias la query a la bd para hacer el insert.

      Aqui explico como crear procedimientos almacenados en sql server.
      Como crear Procedimientos Almacenados en Sql Server

      Saludos.

      Eliminar
  7. hola buenisimo el tutorial pero tengo un problema con la conexion, me tira un error en la parte en qe abre la conexion, quisas es por la cadena de conexion, o no se, me podrias ayudar con eso? saludos

    ResponderEliminar
  8. Hola Rolando cual es la cadena de conexión que estas usando?

    ResponderEliminar
  9. ("Data Source=.\\SQLEXPRESS;AttachDbFilename=C:/Users/Rola/Documents/Visual Studio 2010/WebSites/WebSite1/App_Data/Database.mdf;Integrated Security=True;User Instance=True")

    esa cadena de conexion tengo, el error me lo tira en cn.Open()

    ResponderEliminar
  10. Tienes mal la cadena de conexión la pleca tiene que ser asi /.

    Por la ruta que has puesto me imagino que la base de datos esta en la misma carpeta del proyecto, prueba asi.

    @"Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\Database.mdf;Integrated Security=True;User Instance=True"

    Saludos.

    ResponderEliminar
  11. Hola Cristian
    me podrías especificar como hacer la parte donde mandas llamar el procedimiento alamacenado insertarusuarios, pero utilizando la query a la bd para hacer el insert. porfis es que soy nuevo en esto.......

    ResponderEliminar
  12. Hola.
    Aqui en este articulo hago un insert a la bd usando la query directamente.
    Comprobar si Existe Registro en BD C# - VB.Net

    Analiza el metodo Insert().

    Saludos.

    ResponderEliminar