[C# codigo] insertar registro en base de datos

Iniciado por SRVAM, 2 Enero 2010, 15:52 PM

0 Miembros y 1 Visitante están viendo este tema.

SRVAM

buenas amigos. me gustaria pediros un favor, y es que a ver si podeis revisar mi codigo y decirme que hago mal.
lo que quiero es insertar un registro en una base de datos. utilizo sql server 2005 por si interesa.

lo que quiero hacer, es que al darle al insertar se me abra un formulario con los campos de la tabla para rellenarlos y luego insertarlos. pero a la hora de hacer la sentencia para insertar el nuevo registro no se como hacerlo y llevo unos dias que no encuentro la forma de hacerlo :(

espero que podais ayudarme. aqui os dejo todo el codigo.

FORM 1

[code=csharp]using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient;


namespace mantenimiento_BD
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        public SqlConnection conn = new SqlConnection();
        public SqlDataAdapter DAdatos_personales;
        DataTable DTdatos = new DataTable();
        public string stringconect = "Data Source=.\\SQLEXPRESS;AttachDbFilename=C:\\Users\\rafa2\\Desktop\\programas C#\\mantenimiento BD\\mantenimiento BD\\PruebasRafa.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True";

        private void Form1_Load(object sender, EventArgs e)
        {
            try
            {
                conn.ConnectionString =stringconect;
                conn.Open();
                DAdatos_personales = new SqlDataAdapter("select * from Datos_personales", conn);
                DTdatos.Clear();
                DAdatos_personales.Fill(DTdatos);
                dataGridView1.DataSource = DTdatos;
                conn.Close();
               
            }
            catch
            {
                MessageBox.Show("Se ha producido un error al coenctar con la base de datos", "Error de conexión", MessageBoxButtons.OK, MessageBoxIcon.Error);
                this.Dispose();
            }
        }

        private void btn_insert_Click(object sender, EventArgs e)
        {
            Form2 campos = new Form2();
            campos.Show();
            dataGridView1.Update();
        }

        private void btn_update_Click(object sender, EventArgs e)
        {

        }

        private void btn_delete_Click(object sender, EventArgs e)
        {

        }

    }
}
[/code]

FORM2

[code=csharp]using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Data;
using System.Data.SqlClient;

namespace mantenimiento_BD
{
    public partial class Form2 : Form
    {
        public Form2()
        {
            InitializeComponent();
        }

        Form1 principal = new Form1();
        SqlCommand añadir = new SqlCommand();

        private void button1_Click(object sender, EventArgs e)
        {

            Form1 principal = new Form1();
            principal.conn.ConnectionString = principal.stringconect;
            principal.conn.Open();
            añadir.Connection = principal.conn;
            añadir.CommandText = "insert into Datos_Personales values (" + textBox1.Text + ", " + textBox2.Text + ", " + textBox3.Text + ", " + textBox4.Text + ", " + textBox5.Text + ", " + textBox6.Text + ")";
            añadir.CommandType = CommandType.StoredProcedure;
            añadir.ExecuteNonQuery();
            principal.conn.Close();
            this.Close();
        }
    }
}
[/code]


espero que podais ayudarme. muchas gracias y saludos a todos
C# Programmer

-Estudiante MCTS .NET Framework 3.5-

raul338

Código (csharp) [Seleccionar]

Form2 campos = new Form2();
campos.Show();
dataGridView1.Update();


cambialo por:

Código (csharp) [Seleccionar]

Form2 campos = new Form2();
if (campos.Show() == DialogResult.OK)
   dataGridView1.Update();


Asi si en el formulario acepto, se recarga los registros, sino, no hace nada  ;D

Código (csharp) [Seleccionar]

añadir.CommandText = "insert into Datos_Personales values (" + textBox1.Text + ", " + textBox2.Text + ", " + textBox3.Text + ", " + textBox4.Text + ", " + textBox5.Text + ", " + textBox6.Text + ")";
añadir.CommandType = CommandType.StoredProcedure; // WTF!!!
// Agregar esto
this.DialogResult = DialogResult.OK;
this.Close();


Procedimiento almacenado y una consulta  :huh:
jeje, la linea de procedimiento almacenado deberias borrarla, por lo demas esta bien. Aunque debes seguir aprendiendo (ado.net, para evitar SQL injection  ;))

SRVAM

buenas raul338.

hice lo que me dijiste, y al ejecutar el metodo añadir.ExecuteNonQuery() me aparece el siguiente error al agregar el campo textbox2.text, cuyo contenido corresponde al campo Nombre que esta definido como varchar(15)

No se controló System.Data.SqlClient.SqlException

Message="El nombre \"rafa\" no es válido en este contexto. Las expresiones válidas son constantes, expresiones de constantes y, en algunos contextos, variables. No se permiten nombres de columna."


y donde estaba el update del datagrid he añadido una consulta de toda la tabla.

a ver si podeis ayudarme con el error.

saludos
C# Programmer

-Estudiante MCTS .NET Framework 3.5-

raul338

Código (csharp) [Seleccionar]

añadir.CommandText = "insert into Datos_Personales values (" + textBox1.Text + ", " + textBox2.Text + ", " + textBox3.Text + ", " + textBox4.Text + ", " + textBox5.Text + ", " + textBox6.Text + ")";


En la consulta, te falto las comillas de los valores (INSERT INTO tabla VALUES ( " valor", "valor", etc...) .... cosa que ahi no estas poniendo :P

Código (csharp) [Seleccionar]

añadir.CommandText = "insert into Datos_Personales values ('" + textBox1.Text + "', '" + textBox2.Text + "', '" + textBox3.Text + "', '" + textBox4.Text + "', '" + textBox5.Text + "', '" + textBox6.Text + "')";


Ahi te deberia de andar ;D

SRVAM

uf es verdad!!! que fallo mas tonto!!! no me di cuenta raul338  :rolleyes: muchas gracias por verme el error colega  ;-)

un saludo y gracias de nuevo ^^
C# Programmer

-Estudiante MCTS .NET Framework 3.5-

El condepimp

hey me podrias mostrar los dos formularos que hicistes de este codigo porque estoy estudiando tu codigo y ya con los formularios creo que le voy a entender xfa soy nuevo en esto y quiero aprender.

SRVAM

el formulario no tiene nada, solo un DataGridView y 3 botones jaja

luego ya los textbox necesarios para introducir un registro a tu base de datos ;)
C# Programmer

-Estudiante MCTS .NET Framework 3.5-