Foros del Web » Programación para mayores de 30 ;) » .NET »

Ayuda a novato

Estas en el tema de Ayuda a novato en el foro de .NET en Foros del Web. Mi problema es que no se insertar en una tabla un valor numerico flotante ya que me da éste error: Error al convertir el tipo ...
  #1 (permalink)  
Antiguo 31/01/2005, 13:35
 
Fecha de Ingreso: enero-2005
Mensajes: 16
Antigüedad: 19 años, 4 meses
Puntos: 0
Ayuda a novato

Mi problema es que no se insertar en una tabla un valor numerico flotante ya que me da éste error: Error al convertir el tipo de datos varchar a float.
Os mando el ejemplo

dim val as double
val = 23.45


sql = "INSERT INTO tabla1 " & _
"VALUES('01', '" & val & "')"

Dim cmd As New SqlCommand(sql, SqlConnection1)
sqlconnection1.open()
cmd.executenonquery()
sqlconnection1.close()

Tengo bien creada la sentencia sql ? Si recojo el dato de un textbox debo meterlo con comas o puntos ?. Alguien me puede ayudar ?

Gracias
  #2 (permalink)  
Antiguo 31/01/2005, 17:21
Avatar de xknown  
Fecha de Ingreso: diciembre-2004
Ubicación: Cusco - Perú
Mensajes: 2.248
Antigüedad: 19 años, 4 meses
Puntos: 7
No le pongas las comillas simples en la sentencia SQL:
Código:
sql = "INSERT INTO tabla1 " & _
"VALUES('01', " & val & ")"
Saludos
__________________
Alex Concha
Buayacorp - Programación y Diseño
  #3 (permalink)  
Antiguo 01/02/2005, 01:10
 
Fecha de Ingreso: enero-2005
Mensajes: 16
Antigüedad: 19 años, 4 meses
Puntos: 0
me da error

Hola XKNOWN,

si le quito las comillas a la instrucción me da el siguiente error :

el nombre de columna o los valores especificados no corresponden a la definición de la tabla.

y en la tabla tengo el primer campo varchar y el segundo float.

gracias
  #4 (permalink)  
Antiguo 01/02/2005, 01:46
 
Fecha de Ingreso: abril-2002
Mensajes: 30
Antigüedad: 22 años
Puntos: 1
Solo una cosa, no se si sera eso pero se me acaba de ocurrir. Como esta configurado el punto decimal en tu base de datos?!

Lo digo poir probar a insertar esto:

dim val as double
val = 23,45
__________________
enadan
  #5 (permalink)  
Antiguo 01/02/2005, 01:59
Avatar de xknown  
Fecha de Ingreso: diciembre-2004
Ubicación: Cusco - Perú
Mensajes: 2.248
Antigüedad: 19 años, 4 meses
Puntos: 7
Debes estar haciendo algo mal, te envío la prueba que hice:

Código:
<!-- Definicion de la tabla

create table foo(id varchar(5),val float)

-->

<%@ Page Language="VB" %>
<%@ import Namespace="System.Data" %>
<%@ import Namespace="System.Data.SqlClient" %>
<script runat="server">

    shared conexion as New SqlConnection("server=localhost;uid=sa;pwd=;database=test")
    Dim com as New SqlCommand("select * from foo", conexion)
    
    Sub Page_Load(sender As Object, e As EventArgs)
        com.CommandText = "select * from foo"
        conexion.Open()
        dgMostrar.DataSource=com.ExecuteReader(CommandBehavior.CloseConnection)
        dgMostrar.DataBind
    End Sub
    
    Sub cmdAdd_Click(sender As Object, e As EventArgs)
        Dim val as Double = 0
        Try
            val = CDbl(txtFloat.Text)
        Catch
            val = 23.45 ' Si hay un error, toma por defecto 23.45
        End Try
        com.CommandText = "INSERT INTO foo VALUES('" & txtFirst.Text & "', " & val & ")"
        conexion.Open()
        com.ExecuteNonQuery()
        conexion.Close()
    End Sub

</script>
<html>
<head>
</head>
<body>
    <form id="frm" runat="server">
        <p>
            <asp:Button id="cmdAdd" onclick="cmdAdd_Click" runat="server" Text="Agregar"></asp:Button>
        </p>
        <p>
            Primer Valor: 
            <asp:TextBox id="txtFirst" runat="server">001</asp:TextBox>
        </p>
        <p>
            Valor Flotante: 
            <asp:TextBox id="txtFloat" runat="server">23.45</asp:TextBox>
        </p>
        <p>
            <asp:DataGrid id="dgMostrar" runat="server"></asp:DataGrid>
        </p>
    </form>
</body>
</html>
Saludos
__________________
Alex Concha
Buayacorp - Programación y Diseño
  #6 (permalink)  
Antiguo 01/02/2005, 13:44
 
Fecha de Ingreso: enero-2005
Mensajes: 16
Antigüedad: 19 años, 4 meses
Puntos: 0
para userdan

Cita:
Iniciado por userdan
Solo una cosa, no se si sera eso pero se me acaba de ocurrir. Como esta configurado el punto decimal en tu base de datos?!

Lo digo poir probar a insertar esto:

dim val as double
val = 23,45
hola userdan,

la verdad es que no se como está configurado el punto ni donde se mira pero me parece que la cosa va por ahí. Me podias indicar por favor ?

Muchas gracias
  #7 (permalink)  
Antiguo 01/02/2005, 13:54
 
Fecha de Ingreso: enero-2005
Mensajes: 16
Antigüedad: 19 años, 4 meses
Puntos: 0
Hola XKNOWN

Cita:
Iniciado por xknown
Debes estar haciendo algo mal, te envío la prueba que hice:

Código:
<!-- Definicion de la tabla

create table foo(id varchar(5),val float)

-->

<%@ Page Language="VB" %>
<%@ import Namespace="System.Data" %>
<%@ import Namespace="System.Data.SqlClient" %>
<script runat="server">

    shared conexion as New SqlConnection("server=localhost;uid=sa;pwd=;database=test")
    Dim com as New SqlCommand("select * from foo", conexion)
    
    Sub Page_Load(sender As Object, e As EventArgs)
        com.CommandText = "select * from foo"
        conexion.Open()
        dgMostrar.DataSource=com.ExecuteReader(CommandBehavior.CloseConnection)
        dgMostrar.DataBind
    End Sub
    
    Sub cmdAdd_Click(sender As Object, e As EventArgs)
        Dim val as Double = 0
        Try
            val = CDbl(txtFloat.Text)
        Catch
            val = 23.45 ' Si hay un error, toma por defecto 23.45
        End Try
        com.CommandText = "INSERT INTO foo VALUES('" & txtFirst.Text & "', " & val & ")"
        conexion.Open()
        com.ExecuteNonQuery()
        conexion.Close()
    End Sub

</script>
<html>
<head>
</head>
<body>
    <form id="frm" runat="server">
        <p>
            <asp:Button id="cmdAdd" onclick="cmdAdd_Click" runat="server" Text="Agregar"></asp:Button>
        </p>
        <p>
            Primer Valor: 
            <asp:TextBox id="txtFirst" runat="server">001</asp:TextBox>
        </p>
        <p>
            Valor Flotante: 
            <asp:TextBox id="txtFloat" runat="server">23.45</asp:TextBox>
        </p>
        <p>
            <asp:DataGrid id="dgMostrar" runat="server"></asp:DataGrid>
        </p>
    </form>
</body>
</html>
Saludos

Hola te agradezco mucho tu explicación pero todavía estoy un poco verde para comprenderla.Lo que veo es que me pone en el valor decimal una coma a la hora de INSERTAR y me da error ya que me toma el campo decimal como dos campos el que está antes de la coma y el de después. no se como se modifica el valor de la variable para que sustituya la coma por un punto a la hora de hacer la insercion.

Muchas gracias XKNOWN
  #8 (permalink)  
Antiguo 01/02/2005, 19:00
 
Fecha de Ingreso: agosto-2004
Mensajes: 8
Antigüedad: 19 años, 8 meses
Puntos: 0
Lo que te sucede es que la configuracion regional de tu equipo esta definido para usar coma (,) como separador decimal es por esto que al haber decimales transforma el double a una cadena con coma y asi se envia en la sentencias SQL, ahor abien tienes dos opciones

1) La mas sencilla, cambia la configuracion regional para que se use el separador como decimal, normalmente sucede por instalar window con una version de españa

2) La segunda es un poquito complicada, pero es independiente de la configuracion regional, (imaginate que al instalar tu programa no tienes control sobre la configuraciones regionales de donde estara), en este caso puedes obligar a utilizar un formato en especifico de la siguiente manera

****************

Public Shared Function decimalToString(ByVal decimalValue As Decimal) As String

Dim nfi As System.Globalization.NumberFormatInfo = New System.Globalization.CultureInfo(System.Globalizat ion.CultureInfo.CurrentCulture.Name, False).NumberFormat
nfi.NumberDecimalSeparator = "."
nfi.NumberGroupSeparator = ""
decimalToString = decimalValue.ToString("N", nfi)

End Function

*****************

Esta funcion lo que hace es recibir un decimal y regresarte una cadena con separador decimal como punto, y asi es mas facil invocarla desde cualquie Sql que requieras guardar los decimales de la siguiente manera

******************************

sql = "INSERT INTO tabla1 VALUES('01', " & decimalToString(val) & ")"

******************************

Espero que te sirva

Saludos.
  #9 (permalink)  
Antiguo 02/02/2005, 01:06
 
Fecha de Ingreso: enero-2005
Mensajes: 16
Antigüedad: 19 años, 4 meses
Puntos: 0
para DEVNET

Muchas gracias devnet me has solucionado el problema.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 08:15.