none
Problema Con Insert En Visual Studio 2010 C# A Sql Server 2008 RRS feed

  • Pregunta

  • Buenos Dias Tengo Un Insert Que Me Esta Complicando Estoy Con Un Reporte

    Y Obtengo Todos Estos Datos De Distintos Lados Algunos Directos De La Base

    De Datos Y Otros Son Calculos De Los Mismo Es Por Eso Ahora Esos Datos Tengo

    Que Insertarlos E Tenido Problema Para Insertar Fechas Y Decimales Algen Me Podria 

    Ayudar Estos Son Los Tipo De Datos Que Tiene La Base De Datos

    Campo    Tipo De Dato

    prday  datetime(inserta solo fecha)

    shift int

    po  int

    material int

    seccion int

    piezas int

    kilos decimal (18,4)

    wx decimal (18,4)

    initime datetime (inserta fecha y hora)

    fintime datetime(inserta fecha y hora)

    difcont decimal(18,4)

    Y Este Es Mi Insert Que Hago En C# En Un Boton.

     protected void Button2_Click(object sender, EventArgs e)
        {
                    string decimalSeparator = System.Globalization.CultureInfo.CurrentCulture.NumberFormat.NumberDecimalSeparator;
                    lbl_kgr.Text.Replace(",", decimalSeparator);
                    lbl_wxr.Text.Replace(",", decimalSeparator);
                    lbl_conteo.Text.Replace(",", decimalSeparator);
                    cnx3 = new SqlConnection(conexion3);
                    cnx3.Open();
                    query3 = new SqlCommand();
                    query3.CommandType = CommandType.Text;

                    query3.CommandText = ("insert into vq_recepcion (prday, shift, po, material, seccion, piezas, kilos, wx, initime, fintime, difcont) values (Convert(DateTime,'" + TextBox7.Text + "',105),'" + dropturno.SelectedItem.Value + "','" + droplote.SelectedItem.Value + "','" + Convert.ToInt32(lbl_material.Text) + "','" + Convert.ToInt32(lbl_seccion.Text) + "','" + Convert.ToInt32(lbl_pzsr.Text) + "'," + Decimal.Parse(lbl_kgr.Text) + "','" + Decimal.Parse(lbl_wxr.Text) + "', Convert(DateTime,'" + lbl_inicior.Text + "',105) , Convert(DateTime,'" + lbl_terminor.Text + "',105),'" + Decimal.Parse(lbl_conteo.Text) + "')");
        
                    query3.Connection = cnx3;

                    res = query3.ExecuteNonQuery();

                    cnx3.Close();
        
    }

    Desde Ya Gracias.

    Saludos . . .


    lunes, 26 de marzo de 2012 13:46

Respuestas

  • hola

    el gran problema que tienes es que no usas parametros

    no tienes que realizar ningun replace de comas en un texto, proque ese no es el camino

    protected void Button2_Click(object sender, EventArgs e)
    {
    		cnx3 = new SqlConnection(conexion3);
    		cnx3.Open();
    		
    		string query = @"insert into vq_recepcion (prday, shift, po, material, 
    						seccion, piezas, kilos, wx, initime, fintime, difcont) 
    						values (@prday, @shift, ...,@piezas, @kilos, ...)"
    		query3 = new SqlCommand(query, cnx3);
    		query3.Parameters.AddWithValue("@prday", Convert.ToDateTime(TextBox7.Text));
    		query3.Parameters.AddWithValue("@shift", dropturno.SelectedItem.Value);
    		.
    		.
    		query3.Parameters.AddWithValue("@piezas", Convert.ToInt32(lbl_pzsr.Text));
    		query3.Parameters.AddWithValue("@kilos", Decimal.Parse(lbl_kgr.Text));
    		.
    		.
    
    		
    		res = query3.ExecuteNonQuery();
    
    		cnx3.Close();
        
    } 

    como veras los parametros permitern definir tipos de datos directos, sin tener que convertir nada

    aplcia esta tecnica para solucionar el problema, completa donde puse ... porqu eran muchos los parametros

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    lunes, 26 de marzo de 2012 14:00

Todas las respuestas

  • Hola, el método Replace devuelve y no string pero no sustituye el string sobre el que lo estás aplicacion, por lo que en tu código deberías tener esto

    lbl_kgr.Text = lbl_kgr.Text.Replace(",", decimalSeparator);
    lbl_wxr.Text = lbl_wxr.Text.Replace(",", decimalSeparator);
    lbl_conteo.Text = lbl_conteo.Text.Replace(",", decimalSeparator);

    A nivel particular a mi no me gusta generar las sentencias sql desde el codigo por lo que te recomiendo el uso de Entity Framework o que uses procedimiento almacenados con parámetros con lo que por ejemplo te ahorraras problemas de sql injection.

    http://msdn.microsoft.com/en-us/library/aa214299(v=sql.80).aspx


    Atentamente, Sergio.

    lunes, 26 de marzo de 2012 13:51
  • hola

    el gran problema que tienes es que no usas parametros

    no tienes que realizar ningun replace de comas en un texto, proque ese no es el camino

    protected void Button2_Click(object sender, EventArgs e)
    {
    		cnx3 = new SqlConnection(conexion3);
    		cnx3.Open();
    		
    		string query = @"insert into vq_recepcion (prday, shift, po, material, 
    						seccion, piezas, kilos, wx, initime, fintime, difcont) 
    						values (@prday, @shift, ...,@piezas, @kilos, ...)"
    		query3 = new SqlCommand(query, cnx3);
    		query3.Parameters.AddWithValue("@prday", Convert.ToDateTime(TextBox7.Text));
    		query3.Parameters.AddWithValue("@shift", dropturno.SelectedItem.Value);
    		.
    		.
    		query3.Parameters.AddWithValue("@piezas", Convert.ToInt32(lbl_pzsr.Text));
    		query3.Parameters.AddWithValue("@kilos", Decimal.Parse(lbl_kgr.Text));
    		.
    		.
    
    		
    		res = query3.ExecuteNonQuery();
    
    		cnx3.Close();
        
    } 

    como veras los parametros permitern definir tipos de datos directos, sin tener que convertir nada

    aplcia esta tecnica para solucionar el problema, completa donde puse ... porqu eran muchos los parametros

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    lunes, 26 de marzo de 2012 14:00