none
guardar datos en una tabla sqlsersver y c# RRS feed

  • Pregunta

  • buenas estoy haciendo algo muy sencillo que se me ha olvidado. intento insetar datos tengo una tabla llamada (datos) con cuatro campos  id, nombre1, nombre2, score tengo mi cadena de conexion en una clase aparte

      class conexion// crear la conexxion ala bd
        {
            SqlConnection cn;  
            SqlCommand cmd;   
            SqlDataReader dr; 
    
            public conexion()// coneccion publica para poder verla desde otra vistas
            {
                try
                {
                    cn = new SqlConnection("Data Source=TRABAJO;Initial Catalog=pong;Integrated Security=True");
                    cn.Open();
                    MessageBox.Show("Conectado");
                }
                catch(Exception ex)  
                {
                    MessageBox.Show("no se guardo"+ex.ToString());
    
                }
            }
    
            public string insertar(int id, string nombre1, string nombre2, int puntos)
            {
                string salida = "Jugadores Guardados";
                try
                {
                    cmd = new SqlCommand("insert into datos(id, nombre1,puntos,nombre2) values("+id+",'"+nombre1+"', "+puntos+ ",'" + nombre2 + "' ) ",cn);
                    cmd.ExecuteNonQuery();
                }
                catch (Exception ex)
                {
                    salida = "no se conecto" + ex.ToString();
                }
                return salida;
            }

    y mi formulario con 4 texbox   cabe mensionar que  id es autoincrementable  no se como hacer que  el valor se vaya  vacio y que la bd lo guarde 

     public partial class Inicio : Form
        {
            conexion c = new conexion();
            public Inicio()
            {
                InitializeComponent();
            }
    
            private void button1_Click(object sender, EventArgs e)
            {
              
                    MessageBox.Show(c.insertar(Convert.ToInt32(textBox1.Text), textBox2.Text, textBox3.Text, Convert.ToInt32(textBox4.Text)));
                    textBox1.Text = "";
                    textBox2.Text = "";
                    textBox3.Text = "";
                    textBox24.Text = "";               
    
              
                Form1 form1 = new Form1();
                form1.Show(this);
            }

    miércoles, 23 de mayo de 2018 4:40

Respuestas

  • cabe mensionar que  id es autoincrementable  no se como hacer que  el valor se vaya  vacio y que la bd lo guarde 

    El truco para esto es que el Id se tiene que omitir de la lista de campos del INSERT, y por supuesto no darle ningún valor en la lista de VALUES:

     cmd = new SqlCommand("insert into datos(inombre1,puntos,nombre2) values("'"+nombre1+"', "+puntos+ ",'" + nombre2 + "' ) ",cn);
                   

    Y aparte de esto, insistir en lo que siempre decimos de que hay que parametrizar la sentencia, nunca concatenar los datos que provienen del usuario, ya que esto hace que tu programa sea vulnerable ante ataques de inyección de SQL, además de perjudicar el rendimiento y de fallar con ciertos valores (por ejemplo, imagínate lo que pasaría si el nombre fuera "O'Donnell").

    • Marcado como respuesta Ronal Monroy miércoles, 23 de mayo de 2018 6:01
    miércoles, 23 de mayo de 2018 5:30
    Moderador