Guardar registro con C#

En esta seccion vamos a aprender como podemos almacenar un registro en una base de datos local desde un formulario creado en C#.

Lo que necesitamos para poder empezar es descargar Visual Studio C# 2008 Express Edition.

Para este ejemplo que veremos debemos crear un proyetcto nuevo llamado ventas una vez creado el proyecto agregaremos un nuevo item,seleccionaremos Service-based Database  el  cual llevara el nombre dbempresa.mdf, tal como se muestra en la imagen.

Añadir Base de Datos

Añadimos la bd haciendo click en el boton Add nos mostrara la siguiente ventana y le damos click en Finish  sin modificar el nombre del Dataset con esto tendremos nuestra Base de datos en nuestro proyecto.

dataset

Vamos abrir el explorador de Bases de Datos que se encuentra en el menu View/Otrher Windows/Database Explorer.

Ahora vamos a crear una nueva tabla y asignaremos nuestro primer campo id el cual sera nuestra llave primaria y sera autonumerico como se muestra en las imagenes.

Nueva Tabla

Primary Key

Agregaremos los siguientes Campos Nombre,Apellidos,Telefono,Domicilio y guardaremos nuestra tabla con el nombre de Clientes.

Guardar Tabla

Ahora vamos a darle un diseño a nuestro formulario que en este caso sera al Form1.

En la siguiente imagen los nombres de los textbox que he usado son los siguientes.

txtNombre,txtApellidos,txtTel,txtDir.

Para los Botones los nombres que he  asignado son btnGuardar,btnLimpiar.

Form1

Ahora que ya hemos terminado el diseño de nuestro formulario debemos guardar nuestro proyecto.

Ahora vamos a conocer nuestro DataSource de nuestra Base de datos es por ello que es muy importante antes guardar el proyecto, posteriormente copiaremos todo el datasource que se encuentra en la propiedad Connection String.

DataSource

Aqui viene la parte interesante de como almacenar el contenido de los textbox en la tabla Clientes.

En el evento Click de nuestro boton guardar tendremos el siguiente codigo.

Debemos usar el namespace: using System.Data.SqlClient;

private void btnGuardar_Click(object sender, EventArgs e)

{

String source = @»Data Source=.\SQLEXPRESS;AttachDbFilename=C:\Users\Arturo\Documents\Visual Studio 2008\Projects\ventas\ventas\dbempresa.mdf;Integrated Security=True;User Instance=True»; Aqui debemos Remplazar este datasource por el que copiamos anteriormente.

SqlConnection conexion = new SqlConnection(source);

conexion.Open();

SqlCommand query = new SqlCommand(«Insert into Clientes(Nombre,Apellidos,Telefono,Direccion) Values(‘» + txtNombre.Text + «‘,'» + txtApellidos.Text + «‘,'» + Int32.Parse(txtTel.Text) + «‘,'» + txtDir.Text + «‘);», conexion);

query.ExecuteNonQuery();

conexion.Close();

MessageBox.Show(«El Registro ha sido almacenado», «Listo», MessageBoxButtons.OK);

limpiar();

}
En el evento Click de nuestro boton btnLimpiar llevara la siguiente linea:

limpiar();

Posteriormente vamos a crear la funcion limpiar()

private void limpiar()
{
txtNombre.Text = «»;
txtApellidos.Text = «»;
txtTel.Text = «»;
txtDir.Text = «»;
txtNombre.Focus();
}

Asi es como podemos guardar un registro en nuestra BD desde un formulario en C# para verificar que realmente se esta almacenando el registro podemos poner un DataGridview en un Form2. en el siguiente post vamos a ver como podemos actualizar un DataGridview. siguiendo con este ejemplo.

Descargar el codigo de ejemplo Guardar Registro

53 responses to this post.

  1. Posted by Juanpa on agosto 26, 2009 at 10:38 pm

    Amigo tu codigo no funk ya lo e probado paso por paso y y no guarda a la bdd

    Responder

  2. Posted by Juanpa on septiembre 1, 2009 at 7:21 pm

    Si Amigo al ejecutar el prg se queda en query.ExecuteNonQuery();
    Incorrect syntax near ‘’’.
    y no guarda ayudame plis q tu blog es el unico que me puede ayudar

    Saludos y gracias

    Responder

  3. Posted by Juanpa on septiembre 1, 2009 at 10:14 pm

    Estimado talvez tu podrias enviarme a mi correo el ejemplo en .rar me salvarias la vida

    juanpi6992@hotmail.com

    Responder

  4. Posted by BOB on octubre 26, 2009 at 6:59 pm

    hola Que tal necesito de tu ayuda estoy elaborando un proyecto en SQL2008 y visual studio 2008 y necesito que el proyecto en visual valide los usuarios que estan dados de alta el sql por favor necesito de tu ayuda recibe un cordial saludo

    Responder

  5. Posted by BOB on octubre 26, 2009 at 7:50 pm

    hola mil gracias te dejo mi correo es: mindylorc85@hotmail.com
    saludos

    Responder

  6. Posted by rafa on diciembre 13, 2009 at 8:29 pm

    hola queria saber como se puede guardar o almacenar clientes de acuerdo con su rut, y que estos no se dupliquen en el programa C#, por que tenemos que hacer un simulador bancario, el cual me permita ingresar un rut me muetre los datos, y tambien me de la opcion eliminar cliente, si pudieras ayudar te lo agradeceria.

    Saludos

    Responder

    • Posted by jav0223 on diciembre 13, 2009 at 8:34 pm

      Tendrias que tener en la Base de datos que el nombre del cliente lo tengas como llave primaria para que no te permita duplicarlo o podrias poner en el codigo que te busque el cliente primero y ahi evaluar si ya existe o no te dejo mi correo jav0223@hotmail.com para que me envies tu correo y te mando un ejemplo.

      Responder

  7. Posted by rafa on diciembre 13, 2009 at 9:02 pm

    te envie el correo con lo que tenemos y para caxar si esta bien, y nos falta eso que te dije gracias, ojala nos puedas guiar.

    muchas gracias

    Responder

  8. Posted by Lucas on diciembre 27, 2009 at 9:59 pm

    Amigo..me puedes mandar el codigo en .rar pq me da error de sintaxis..desde ya muchas gracias..

    Responder

  9. Posted by jose abraham on enero 1, 2010 at 5:13 pm

    hola q tal estan buenisimos tu ejemplo bien explicado, tengo una duda el sql server express que utilizas ya biene iintegrando con el visual c# express o el sql server lo tienes instalado a parte. por que yo e querido hacer los mismos pasos tuyos cuando deseo guardar datos en un BD pero cuando agrego una BD desde C# como lo haces tu tiene una extencion diferente es la sdf y no mdf como tu ejemplo. me gustaria saber tu opinio hacerca del por que pasa esto t lo agredaceria mucho.

    Responder

    • Posted by jav0223 on enero 1, 2010 at 7:04 pm

      Hola te comento cuando agregas un nuevo Item deberas seleccionar Base de datos basada en servicio, esta es la que te agrega la base de datos con extencion .mdf, talves tu estes seleccionando la de Base de datos local ya que esta si te asigna la extencion .sdf.

      Ahora si deseas obtener datos de una bd de SQL EXPRESS y crearla directamente de ahi, deberas bajar el Management Tools ya que Visual c# te descarga solo una parte de SQL EXPRESS. aqui te dejo la liga para descargar el Management Tools este se encuentra hasta abajo de la pagina.

      Link: Management Tools
      Saludos y espero y te haya ayudado.

      Responder

  10. Posted by RAFAEL RODRIGUEZ on enero 20, 2010 at 3:00 am

    hola como vas tu explicacion esta super, realizando tu ejemplo
    String source = @»Data Source=.\SQLEXPRESS;AttachDbFilename=C:\Documents and Settings\RafaelR\Escritorio\Doctor Severini\WindowsFormsApplication1\WindowsFormsApplication1\Database1.mdf;Integrated Security=True;User Instance=True»;
    SqlConnection conexion = new SqlConnection(source);
    conexion.Open();
    SqlCommand query = new SqlCommand(«insert into pacientes(DCidentidad,DCnombres,DCapellidos,DCeps,DCedad) values(‘+ textBox6.Text + ‘,’+textBox7.Text+’ ,’+textBox1.Text+’ ,’+comboBox1.Text+’ ,’+textBox2.Text+’)», conexion);
    query.ExecuteNonQuery();//aqui me sale un error que dice «Los datos de cadena o binarios se truncarían.
    Se terminó la instrucción.» por favor me ayudas

    Responder

    • Posted by jav0223 on enero 20, 2010 at 3:40 am

      Hola el error te da por que en el tipo de dato de la base de datos tiene una longitud menor a la que tu estas ingresando en el textbox, un ejemplo seria si en el campo de DCnombres es nchar(10) y tu pones un dato mayor de 10 caracteres te marca el error que te sale.
      una observacion amigo el codigo de insert into seria asi:
      SqlCommand query = new SqlCommand(«insert into pacientes(DCidentidad,DCnombres,DCapellidos,DCeps,DCedad) values(‘ «+ textBox6.Text + » ‘,’ » +textBox7.Text + » ‘ ,’ » +textBox1.Text+ » ‘ , ‘ » +comboBox1.Text+ » ‘ , ‘ «+textBox2.Text+ » ‘); » , conexion);

      Espero que te sea de utilidad mi respuesta.
      Saludos y Gracias por visitar el Blog.

      Responder

  11. Posted by Fernando on febrero 20, 2010 at 6:09 am

    Hola, estoy intentado cargar la fecha de un datatimepicker, pero siempre me arroja error por que no puede pasar un string a un date.

    el codigo que uso es:

    dtpDOB.vale.toSting()

    Me puede ayudar por favor.

    Responder

  12. Posted by ricardo on febrero 23, 2010 at 12:45 am

    hola que tal olle e podias regalar una copia de tu proyecto pork algo me anda saliendo mal mas bien no entiendo eso del name espace eso lo sustituyo por el using y preferiria que me enviaras tu proyecto para entederle mejor y esta muy buena tu expliacion saludos

    Responder

  13. Posted by ricardo on febrero 23, 2010 at 1:06 am

    se me olvido poner mi mail es riki_mm@hotmail.com

    Responder

  14. Posted by ricardo on febrero 23, 2010 at 1:26 am

    bueno ahora tengo un problema en este codigo
    SqlConnection conexion = new SqlConnection(source);
    me dice no se controlo argumentexeption palabra clave no admitida:’data source’.

    Responder

  15. Posted by Jose on febrero 24, 2010 at 3:18 pm

    Hola amigo increible el post. Es justo lo que necesito! estoy empezando a aprender sobre C# me gustaria que me enviaras una copia de tu proyecto por favor para checar mejor la codificacion, es que hay unas cositas que no entiendo.. De antemano muchas gracias y saludos muy buen post

    Responder

  16. Posted by CAMILO on marzo 4, 2010 at 1:13 pm

    Vacan lo que pasa es que he intentado correr el codigo y presetan muchos errores por que dice que el visual no acepta algunos simbolos bueno o que son parametros inesperados, entodo caso es para ver si me podrias hacer el favor envirame el ejemplo completa para ver si pued avanzar en un programa ke necesito hacer con urgencia y esta parte me tiene estancado. de antemano muchas gracias

    camix242@gmail.com

    Responder

    • Posted by jav0223 on marzo 4, 2010 at 9:02 pm

      Hola!
      Ya te envie el archivo, esos errores te dan por que lo copias desde wordpress y las comillas dobles y simples por el tipo de letra en el post al copiarlos a visual te los marca en rojo te recomiendo que las comillas dobles y simples las vuelvas a escribir.

      Responder

  17. Posted by ricardo on marzo 7, 2010 at 6:13 am

    hola volviendo de nuevo y si jav tiene razon esos errores por lo general simpre te los manda en las comillas pero el codigo si sirve y gracias jav por madarme tambien ami tu ejemplo y me funciono muy bien

    Responder

  18. Posted by julyus on marzo 16, 2010 at 6:20 pm

    yo hice algo parecido a tu example PERO PUSE UN CAMPO DATE PARA ALMACENAR LA FECHA PERO ME SALE ERROR «exc = {«Error de conversión al convertir una cadena de caracteres a datetime.»}» COMO LO HAGO ?

    ESTE ES MI CODE:

    private void button1_Click(object sender, EventArgs e)
    {
    System.DateTime date = new System.DateTime(2010, 03, 16, 9, 0, 0);
    date = this.dateTimeInput1.Value;
    String.Format(«d», date);

    string insert = «INSERT INTO SOLICITUD_CEPAS_PACIENTES (ID_CEPA, FECHA_AISLAMIENTO, ID_AISLAMIENTO) VALUES(‘» + this.textBoxX1.Text.ToString()+ «‘,'» +date+ «‘,'» + this.textBoxX2.Text.ToString() + «‘)»;
    string jags = «Server=Vesta; Initial Catalog=Biobank;User Id=bioapp;Password=b1o4pp;»;
    SqlConnection conectar = new SqlConnection(jags);
    SqlCommand comand = new SqlCommand(insert, conectar);
    conectar.Open();

    try
    {
    comand.ExecuteNonQuery();
    }
    catch (Exception exc)
    {
    throw new Exception(«Error al insertar datos», exc);
    }
    finally
    {
    MessageBox.Show(«Datos Guardados», «», MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
    }
    }

    Responder

    • Posted by jav0223 on marzo 17, 2010 at 5:28 am

      ¡Hola!.
      Para guardar un tipo de dato datetime en sql quedaría así el código.
      1- Obtener la fecha actual esto lo cargo en el form_Load
      private void Form1_Load(object sender, EventArgs e)
      {
      textBox_Fecha.Text = DateTime.Now.ToString();
      }
      2.De acuerdo al código que pones de ejemplo quedaría de la siguiente forma.

      private void button1_Click(object sender, EventArgs e)
      {
      DateTime fecha=Convert.ToDateTime(textBox_Fecha.Text);

      string insert = “INSERT INTO SOLICITUD_CEPAS_PACIENTES (ID_CEPA, FECHA_AISLAMIENTO, ID_AISLAMIENTO) VALUES(‘” + this.textBoxX1.Text.ToString()+ “‘,@fecha,’” + this.textBoxX2.Text.ToString() + “‘)”;
      string jags = “Server=Vesta; Initial Catalog=Biobank;User Id=bioapp;Password=b1o4pp;”;
      SqlConnection conectar = new SqlConnection(jags);
      SqlCommand comand = new SqlCommand(insert, conectar);
      comand.Parameters.Add(new SqlParameter(«@fecha», SqlDbType.DateTime)).Value = fecha ;

      conectar.Open();

      try
      {
      comand.ExecuteNonQuery();
      }
      catch (Exception exc)
      {
      throw new Exception(“Error al insertar datos”, exc);
      }
      finally
      {
      MessageBox.Show(“Datos Guardados”, “”, MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
      }
      }

      Te pongo en negritas las partes que yo anexe a tu código, si copias el código que puse aquí no olvides en volver a escribir los apostrofes y las comillas dobles, por aquello del tipo de letra que contiene el blog (:
      Espero y te funcione el código.
      Saludos.

      Responder

  19. Posted by daniela lopez carbajal on abril 20, 2010 at 1:00 pm

    Hola 😀 como estas tengo qe decirte qe aun que tu codigo tiene unos errores me a servido mucho solo arregle los pequeños errores que tenia y me corre bastante bien mira
    1ro que nada no dejas qe el Id sea auto incrementable ahi ai un error por que como no estas metiendo ningun txtbox para poner id marca error por que dejastes valida la opcion de q el Id no fuera nulo
    2do ala hora de hacer la insecion pusistes Direccion cuando al momento de crear la tabla avias puesto Domicilio arreglando eso el pgm corre pero si bien 😀 muchas gracias de vdd me salvastes tngo dsd las 5 d la tarde sentada aqui haciendo esto y otras tareas ers un dios gracias 😀

    Responder

  20. Posted by Joel on abril 21, 2010 at 3:34 am

    hola hermano si me puedes enviar el pequeño proyecto en .rar que le enviaste a los otros colegas te lo voy agradecer es que lo nesesito para mi practica final de la uni

    tarantula_y2k@yahoo.com

    Responder

  21. Posted by Joel on abril 22, 2010 at 3:16 am

    gracias arturo si me llego… mil gracias. ahora si no es mucha molestia me gustaria que me ayudaras en una ultima cosita…

    me gustaria saber como yo puedo llenar un datagrid…. ya tengo el datagrid hecho y las coumnas tambien lo que quiero es: que a traves de 3 textbox y un boton. yo escriba los datos en los textbox y cuando le de al boton se agrege al datagrid. solo me falta eso para terminar el proyecto saludos 🙂

    Responder

    • Posted by jav0223 on abril 22, 2010 at 4:17 am

      Hola mira aqui en el blog hay un post sobre datagridview checa como lo hize y ahi puedes meter el insert para agregar los campos en la funcion actualizar espero y te sirva si no, no dudes en preguntar Saludos 🙂

      Responder

  22. Posted by ADOLFO on May 2, 2010 at 8:52 am

    Que tal Arturo, como te va? Espero de maravilla, pues ocupo una ayudadita, resulta que tengo un datagrid, tengo como proyecto un punto de venta,,,,quiero que en mi datagrid, en mi columna codigo de producto al ponerle un codigo de mi tabla lo despliegue por toda la fila, dodne se hayan, descripcion, precio, otros campos vacios seran Cantidad, Importe y hasta abajo afuera del datagrid, tengo Total, ya tengo como hacer el total, pero no me sale lo del datagrid de traer los datos por Codigo,,,,me podrias ayudar??? Lo trabajo en C # y la conexion la hago en OLEDB Access, aunque es similar a SqlClient, si me das una opcion en SQL server, no importa, la adopto y ya la implementaria, gracias de ante mano, saludos.

    Responder

  23. Posted by David on May 15, 2010 at 2:09 am

    Hola como estas?? 🙂 no se si me podrás colaborar pero necesito buscar registros en una base de datos de Acces, el caso es que quiero digitar el código principal del registro y que cuando le de clic en el botón buscar me aparezca automáticamente los demás registros pero solo me lee el primer registro y los demás no!! 😦

    gracias por tu atención

    Este es mi código

    private void button1_Click(object sender,EventArgs e)
    {
    string connection = @»Provider=Microsoft.ACE.OLEDB.12.0;Data Source=D:\programacion form\Alquiler modo desconectado\Alquiler de Peliculas.accdb;Persist Security Info=False»;
    OleDbConnection mi = new OleDbConnection(connection);
    OleDbCommand command;
    command = new OleDbCommand();
    command.CommandText = «select Codigo,Cedula,Nombredelcliente,Telefono,Direccion from Cliente»;
    command.Connection = mi;
    mi.Open();
    OleDbDataReader rs = command.ExecuteReader();
    if (rs.Read())
    {
    textBox1.Text = rs[«Codigo»].ToString();
    textBox2.Text = rs[«Cedula»].ToString();
    textBox3.Text = rs[«Nombredelcliente»].ToString();
    textBox4.Text = rs[«Telefono»].ToString();
    textBox5.Text = rs[«Direccion»].ToString();
    }
    rs.Close();
    command.Dispose();
    mi.Close();

    }

    Responder

  24. Posted by mario on junio 7, 2010 at 5:59 pm

    parce tengo una duda ahi con un codigo en c# q estoy desarrollando, entonces yo te mande al correo un ejemplo con lo que trato de conseguir, Gracias parcero por culaquier ayuda que me podás brindar

    Responder

  25. Posted by nady_502 on junio 11, 2010 at 4:54 am

    muchiisimas gracias

    Responder

  26. Posted by Daniel on junio 12, 2010 at 1:41 am

    me puedes mandar el codigo en .rar o .zip por que me da error de sintaxis..desde ya muchas gracias.. 😉

    Responder

  27. Posted by Daniel on junio 12, 2010 at 1:42 am

    me puedes mandar el codigo en .rar o .zip porque me da error de sintaxis..desde ya muchas gracias..

    Responder

  28. Posted by Juan pablo Morales on julio 12, 2010 at 10:36 pm

    Hola Arturo como vas..??

    mira e seguido todo tu post y me ha ayudado full..
    ahora tengo el siguiente problema..
    hice un prg de ingreso de encuestas.. todo funciona ok..
    pero quiero que ese programa lo utilices 5 usuarios…
    lo e compartido como vulgarmente se lo hace. … todo listo en las otras maquinas se abre el prg.. pero al momento de guardar sale un error…. ayudame por fa…

    Responder

  29. Posted by Juan pablo Morales on julio 12, 2010 at 10:41 pm

    O quisiera hacer un instalador del mismo…. pero que en se maneje el prg desde el servidor…me explico

    que desde cualquier maquina que se ingresen los datos…
    de igual pueda sacar reportes de todos los datos infresados desde todas las maquinas…. no necesariamente desde un server

    Responder

  30. Posted by Juan pablo Morales on julio 21, 2010 at 10:21 pm

    Hola Arturo!!!

    Quisiera saber si me puedes ayudar!!!

    Necesito exportar el datagrid como un archivo de excel…

    Mil gracias por la ayuda……

    Responder

  31. Posted by Manuel on noviembre 5, 2010 at 6:41 pm

    Primero que nada muy buen post me ha sido de bastante ayuda, ahora el problema que yo he tenido es que el programa en la maquina en la que estoy trabajando corre de maravilla pero al momento de hacer el instalador y todo y quererlo instalar en otra maquina lo instala pero al intentar guardar los registros me sale un error donde dice que «ya existe una base de datos con el mismo nombre o es un recurso compartido UNC» algo asi. y no se como solucionarlo si me ayudaras q ver mi error o mas o menos ayudarme a como solucionar el problema te lo agradeceria me sacarias de un gran apuro Gracias!!

    Responder

  32. Posted by Ivan Escalante on May 17, 2012 at 4:57 pm

    Que onda amigo sigues en este blog??

    Responder

  33. OYE ESTA MUY BUENO EL CODIGO, NO SE SI ME PUEDAS BRINDAR EL CODIGO PARA EDITAR, CONSULTAR Y ELIMINAR CON EL MISMO EJEMPLO, TE LO AGRADECERIA MUCHO

    Responder

  34. Posted by Caro on julio 16, 2012 at 11:36 pm

    Hola!!! queria agradecerte por el post, me sirvio muchisimo!!!
    bueno queria pedirte una pequeña ayuda, lo que pasa es q estoy tratando de aprender a programar en 3 capas, te agradeceria mucho si me puedes ayudar

    lo que necesito hacer es crear un proyecto en el cual se puedan ingresar, modificar y eliminar datos de alumnos, ademas que se pueda realizar los mismos pasos anteriores con las notas de cada alumno

    porfa te agradeceria que me ayudaras =)

    Responder

  35. Gracias por su ayuda la verdad yo en mi vida habia programado pero gracias a parte de su codigo termine un pequeño trabajin

    Responder

  36. Posted by Romanos on octubre 17, 2012 at 9:54 pm

    Buen block, este si contesta a los usuarios cosa muy buena, aunque solo me ha servido para leer en este block pero felicito al dueño, por que sí da repuesta a los suscriptores, felicidades

    Responder

Replica a nady_502 Cancelar la respuesta