none
Problemas al instertar decimales en un BBDD RRS feed

  • Pregunta



  • double vars = (Convert.ToDouble(split[3])); MessageBox.Show(vars.ToString()); string consulta1 = "Insert into surt (surt,mang,lt) values ('01','01',"+vars+")";

    Buenas tardes.

    tengo un problemilla al instertar una variable double en una base de datos, ya que cuando quiero insertarlo me dice que tengo "too many arguments", esto es debido a que le mando tres argumentos y cuando le paso la varible con un numero con coma, cree que le estoy pasando 4 parametros en vez de 3.

    hay alguna forma de que al dividir el entero se quede con un punto o que al insertar el numero decimal me lo respete.

    Un saludo y gracias de antemano.


    ibz
    jueves, 14 de enero de 2010 17:22

Respuestas

  • hola

    prueba usando parametros en tu consulta

        using (SqlConnection conn = new SqlConnection("connection string"))
        {
            string query = "Insert into surt (surt,mang,lt) values (@surt, @mang, @lt)"
            SqlCommand command = new SqlCommand(query, conn);
           
            command.AddWithValue("surt", "01");
            command.AddWithValue("mang", "01");
            command.AddWithValue("lt", vars);

            command.ExecuteNonQuery();
           
        }

    como veras vars es la variable tipo decimal que estas usando

    lo que me llamo la atencion es que solo tienes la query en el ejemplo dodne esta elr esto del codigo que suas para ejecutarla?

    saludos
    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    • Marcado como respuesta Diegog252 domingo, 17 de enero de 2010 12:39
    jueves, 14 de enero de 2010 18:50
  • Hola Diegog252,

    Tu problema no es mas que el formato que se le esta dando al numero cuando lo conviertes a string, en el cual reemplaza los puntos por comas, esto es debido a las opciones regionales y de lenguaje que tienes seeccionadas en tu version de windows.
    Puedes hacer lo siguiente:

    -Cambia las opciones regionales y de lenguaje en el panel de control por un formato de numeros en el cual no se usen comas como separador de decimales.
    -Cambiar la opcion regional y de lenguaje desde el codigo:

    Solo necesitas agregar estas dos directivas using al inicio de tu codigo:

    using System.Globalization;
    using System.Threading;
    y modificas tu codigo para que se vea asi:
    double vars = (Convert.ToDouble(split[3]));
    
    //Guardas el nombre de la cultura actual
    string oldCultureName = CultureInfo.CurrentCulture.Name;
    
    //cambias la cultura actual por una que use punto como separador de decimaes.
    CultureInfo newCult = new CultureInfo("en-US");
    Thread.CurrentThread.CurrentCulture = newCult;
    
    MessageBox.Show(vars.ToString());
    string consulta1 = "Insert into surt (surt,mang,lt) values ('01','01'," + vars + ")";
    
    //Despues regresas a la cultura anterior.
    Thread.CurrentThread.CurrentCulture = new CultureInfo(oldCultureName);
    Espero que esto te sirva amigo.
    Saludos.
    • Propuesto como respuesta MagiCoder jueves, 14 de enero de 2010 19:16
    • Marcado como respuesta Diegog252 domingo, 17 de enero de 2010 12:39
    jueves, 14 de enero de 2010 19:16

Todas las respuestas

  • hola

    prueba usando parametros en tu consulta

        using (SqlConnection conn = new SqlConnection("connection string"))
        {
            string query = "Insert into surt (surt,mang,lt) values (@surt, @mang, @lt)"
            SqlCommand command = new SqlCommand(query, conn);
           
            command.AddWithValue("surt", "01");
            command.AddWithValue("mang", "01");
            command.AddWithValue("lt", vars);

            command.ExecuteNonQuery();
           
        }

    como veras vars es la variable tipo decimal que estas usando

    lo que me llamo la atencion es que solo tienes la query en el ejemplo dodne esta elr esto del codigo que suas para ejecutarla?

    saludos
    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    • Marcado como respuesta Diegog252 domingo, 17 de enero de 2010 12:39
    jueves, 14 de enero de 2010 18:50
  • Hola Diegog252,

    Tu problema no es mas que el formato que se le esta dando al numero cuando lo conviertes a string, en el cual reemplaza los puntos por comas, esto es debido a las opciones regionales y de lenguaje que tienes seeccionadas en tu version de windows.
    Puedes hacer lo siguiente:

    -Cambia las opciones regionales y de lenguaje en el panel de control por un formato de numeros en el cual no se usen comas como separador de decimales.
    -Cambiar la opcion regional y de lenguaje desde el codigo:

    Solo necesitas agregar estas dos directivas using al inicio de tu codigo:

    using System.Globalization;
    using System.Threading;
    y modificas tu codigo para que se vea asi:
    double vars = (Convert.ToDouble(split[3]));
    
    //Guardas el nombre de la cultura actual
    string oldCultureName = CultureInfo.CurrentCulture.Name;
    
    //cambias la cultura actual por una que use punto como separador de decimaes.
    CultureInfo newCult = new CultureInfo("en-US");
    Thread.CurrentThread.CurrentCulture = newCult;
    
    MessageBox.Show(vars.ToString());
    string consulta1 = "Insert into surt (surt,mang,lt) values ('01','01'," + vars + ")";
    
    //Despues regresas a la cultura anterior.
    Thread.CurrentThread.CurrentCulture = new CultureInfo(oldCultureName);
    Espero que esto te sirva amigo.
    Saludos.
    • Propuesto como respuesta MagiCoder jueves, 14 de enero de 2010 19:16
    • Marcado como respuesta Diegog252 domingo, 17 de enero de 2010 12:39
    jueves, 14 de enero de 2010 19:16
  • Antes de nada gracias por la respuestas me han sido útiles.

    no he puesto el resto del código, por abreviar.

    Un saludo.

    ibz
    domingo, 17 de enero de 2010 12:43