none
La conversion de la cadena update from Causas set Procedenc en el tipo Doubl; no es VAlida. RRS feed

  • Pregunta

  • buenas... nuevamente pidiendo ayuda sobre un problemita que me surge a lo mejor sea mas simple de lo que me imagino , resulta que quiero actualizar un registro, y me salta el errror La conversión de la cadena "update from Causas set Procedenc" en el tipo 'Double' no es válida.

    paso el codigo:

    Public Class Causasdelitos

        Private Conexion As coneccion = New coneccion()

        Private Comando As OleDbCommand = New OleDbCommand()

        Private LeerFilas As OleDbDataReader

        

    Public Sub EditarProductos()

            Comando.Connection = Conexion.AbrirConexion()

            Comando.CommandText = Comando.CommandText = "update Causas set Procedencia=" + procedencia & ",Tipo=" + tipo & ",Instructor=" + instructor & ",Delito=" + delito & "',Caratula='" + caratula & "',Legajo='" + legajo & "',Damnificado='" + damnificado & "', Acusado='" + acusado & "',Detenido='" + detenido & "',FechaHecho='" + fechaHecho & "',FechaIngreso='" + fechaingreso & "',Fiscal='" + fiscal & "',BreveResumen='" + breveresumen & ",Elevado=" + elevado & ",Esclarecido=" + esclarecido & ",FechaElevacion=" + fechaelevacion & "',Observaciones='" + observaciones & "where Expte =" + expte

            Comando.CommandType = CommandType.Text

            Comando.ExecuteNonQuery()

            Conexion.CerrarConexion()

        End Sub


            Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
                objCausa._expte = ExpteTextBox.Text
                objCausa._legajo = LegajoTextBox.Text
                objCausa._fechaingreso = Convert.ToDateTime(FechaIngresoDateTimePicker.Value)
                objCausa._procedencia = Convert.ToInt32(ProcedenciaComboBox.SelectedValue)
                objCausa._tipo = Convert.ToInt32(TipoComboBox.SelectedValue)
                objCausa._delito = Convert.ToInt32(DelitoComboBox.SelectedValue)
                objCausa._caratula = CaratulaTextBox.Text
                objCausa._damnificado = DamnificadoTextBox.Text
                objCausa._acusado = AcusadoTextBox.Text
                objCausa._detenido = DetenidoTextBox.Text
                objCausa._fechahecho = Convert.ToDateTime(FechaHechoDateTimePicker.Value)
                objCausa._lugarhecho = LugarHechoTextBox.Text
                objCausa._instructor = Convert.ToInt32(InstructorComboBox.SelectedValue)
                objCausa._fiscal = FiscalTextBox.Text
                objCausa._breveresumen = BreveResumenTextBox.Text
                objCausa._elevado = Convert.ToBoolean(ElevadoCheckBox.Checked)
                objCausa._esclarecido = Convert.ToBoolean(EsclarecidoCheckBox.Checked)
                objCausa._fechaelevacion = Convert.ToDateTime(FechaElevacionDateTimePicker.Value)
                objCausa._observaciones = ObservacionesTextBox.Text

                objCausa.EditarProductos()
                MessageBox.Show("Se edito correctamente")
                Me.Close()
            End If

        End Sub

    tengo una clase en donde guardo todos las funciones y despues desde un formulario padre en donde se encuentra un datagridvwe, llamo a un form en donde se encuentran los text box y combobox, y un solo boton que guarda y edita...

    pd. es metodo get y set

    desde ya muchas gracias.-

    lunes, 26 de noviembre de 2018 22:43

Respuestas

  • Para complementar la respuesta de Alberto, aquí tienes un ejemplo de cómo parametrizar consultas con Ado.NET. También te recomiendo que NO uses un objeto Conexión y/o Command de forma global de la clase. Las buenas prácticas dicen que hay que usar de forma local en el método el objeto conexión y los comandos empleando bloques Using para que se gestione de forma correcta el pool de conexiones 

    Public Sub EditarProductos(causa As Causa)
    
    	Dim sql As String = "update Causas set Procedencia= @procedencia,Tipo=@tipo,Instructor=@instructor,Delito=@delito,Caratula=@caratula,Legajo=@legajo,Damnificado=@damnificado, Acusado=@acusado, " _ 
    						  "Detenido=@detenido,FechaHecho=@fechaHecho,FechaIngreso=@fechaingreso,Fiscal=@fiscal,BreveResumen=@breveresumen,Elevado=@elevado,Esclarecido=@esclarecido,FechaElevacion=@fechaelevacion,Observaciones=@observaciones where Expte = @expte"
    
    	 
    	Using cn As New SqlConnection("Your connection string here"), _
            cmd As New SqlCommand(sql, cn)
    		cmd.CommandType = CommandType.Text
    
            cmd.Parameters.AddWithValue("@procedencia", causa._procedencia)
    		cmd.Parameters.AddWithValue("@tipo", causa._tipo)
    		cmd.Parameters.AddWithValue("@instructor", causa._instructor)
    		cmd.Parameters.AddWithValue("@delito", causa._delito)
    		cmd.Parameters.AddWithValue("@caratula", causa._caratula)
    		cmd.Parameters.AddWithValue("@legajo", causa._legajo)
    		cmd.Parameters.AddWithValue("@damnificado", causa._damnificado)
    		cmd.Parameters.AddWithValue("@acusado", causa._acusado)
    		cmd.Parameters.AddWithValue("@detenido", causa._detenido)
    		cmd.Parameters.AddWithValue("@fechaHecho", causa._fechahecho)
    		cmd.Parameters.AddWithValue("@fechaingreso", causa._fechaingreso)
    		cmd.Parameters.AddWithValue("@fiscal", causa._fiscal)
    		cmd.Parameters.AddWithValue("@breveresumen", causa._breveresumen)
    		cmd.Parameters.AddWithValue("@elevado", causa._elevado)
    		cmd.Parameters.AddWithValue("@esclarecido", causa._esclarecido )
    		cmd.Parameters.AddWithValue("@fechaelevacion", causa._fechaelevacion)
    		cmd.Parameters.AddWithValue("@observaciones", causa._observaciones)
    		cmd.Parameters.AddWithValue("@expte", causa._expte) 		
    		
            cmd.ExecuteNonQuery()
        End Using
    
    End Sub
    
    
    Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
    	objCausa._expte = ExpteTextBox.Text
    	objCausa._legajo = LegajoTextBox.Text
    	objCausa._fechaingreso = Convert.ToDateTime(FechaIngresoDateTimePicker.Value)
    	objCausa._procedencia = Convert.ToInt32(ProcedenciaComboBox.SelectedValue)
    	objCausa._tipo = Convert.ToInt32(TipoComboBox.SelectedValue)
    	objCausa._delito = Convert.ToInt32(DelitoComboBox.SelectedValue)
    	objCausa._caratula = CaratulaTextBox.Text
    	objCausa._damnificado = DamnificadoTextBox.Text
    	objCausa._acusado = AcusadoTextBox.Text
    	objCausa._detenido = DetenidoTextBox.Text
    	objCausa._fechahecho = Convert.ToDateTime(FechaHechoDateTimePicker.Value)
    	objCausa._lugarhecho = LugarHechoTextBox.Text
    	objCausa._instructor = Convert.ToInt32(InstructorComboBox.SelectedValue)
    	objCausa._fiscal = FiscalTextBox.Text
    	objCausa._breveresumen = BreveResumenTextBox.Text
    	objCausa._elevado = Convert.ToBoolean(ElevadoCheckBox.Checked)
    	objCausa._esclarecido = Convert.ToBoolean(EsclarecidoCheckBox.Checked)
    	objCausa._fechaelevacion = Convert.ToDateTime(FechaElevacionDateTimePicker.Value)
    	objCausa._observaciones = ObservacionesTextBox.Text
    
    	objCausa.EditarProductos(objCausa)
    	MessageBox.Show("Se edito correctamente")
    	Me.Close()
    
    End Sub


    Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó, vótala como útil. Saludos

    • Propuesto como respuesta Pablo Rubio martes, 27 de noviembre de 2018 16:08
    • Marcado como respuesta Frankozub martes, 27 de noviembre de 2018 21:59
    martes, 27 de noviembre de 2018 9:03

Todas las respuestas

  • Seguramente el problema está en que has usado el operador "+" (suma) en lugar del operador "&" (concatenar cadenas):

    "Update... Procedencia=" + procedencia

    Aparte de eso, y una vez que lo cambies por un "&" (en todos los sitios donde tienes un "+"), posiblemente te aparecerá un segundo error, suponiendo que la variable procedencia es de tipo double. El problema es que al concatenarla en la cadena, VB hará la conversión de double a string utilizando el formato que esté configurado en el Panel de Control, y si lo tienes configurado con coma decimal, entonces fallará porque SQL espera un punto decimal en lugar de la coma. Esta es una de las muchas razones por la que se desaconseja escribir sentencias SQL concatenando valores de esa manera; lo indicado es parametrizar la sentencia y luego meter las variables en los parámetros.

    • Propuesto como respuesta Sergio Parra martes, 27 de noviembre de 2018 22:01
    martes, 27 de noviembre de 2018 6:58
  • Para complementar la respuesta de Alberto, aquí tienes un ejemplo de cómo parametrizar consultas con Ado.NET. También te recomiendo que NO uses un objeto Conexión y/o Command de forma global de la clase. Las buenas prácticas dicen que hay que usar de forma local en el método el objeto conexión y los comandos empleando bloques Using para que se gestione de forma correcta el pool de conexiones 

    Public Sub EditarProductos(causa As Causa)
    
    	Dim sql As String = "update Causas set Procedencia= @procedencia,Tipo=@tipo,Instructor=@instructor,Delito=@delito,Caratula=@caratula,Legajo=@legajo,Damnificado=@damnificado, Acusado=@acusado, " _ 
    						  "Detenido=@detenido,FechaHecho=@fechaHecho,FechaIngreso=@fechaingreso,Fiscal=@fiscal,BreveResumen=@breveresumen,Elevado=@elevado,Esclarecido=@esclarecido,FechaElevacion=@fechaelevacion,Observaciones=@observaciones where Expte = @expte"
    
    	 
    	Using cn As New SqlConnection("Your connection string here"), _
            cmd As New SqlCommand(sql, cn)
    		cmd.CommandType = CommandType.Text
    
            cmd.Parameters.AddWithValue("@procedencia", causa._procedencia)
    		cmd.Parameters.AddWithValue("@tipo", causa._tipo)
    		cmd.Parameters.AddWithValue("@instructor", causa._instructor)
    		cmd.Parameters.AddWithValue("@delito", causa._delito)
    		cmd.Parameters.AddWithValue("@caratula", causa._caratula)
    		cmd.Parameters.AddWithValue("@legajo", causa._legajo)
    		cmd.Parameters.AddWithValue("@damnificado", causa._damnificado)
    		cmd.Parameters.AddWithValue("@acusado", causa._acusado)
    		cmd.Parameters.AddWithValue("@detenido", causa._detenido)
    		cmd.Parameters.AddWithValue("@fechaHecho", causa._fechahecho)
    		cmd.Parameters.AddWithValue("@fechaingreso", causa._fechaingreso)
    		cmd.Parameters.AddWithValue("@fiscal", causa._fiscal)
    		cmd.Parameters.AddWithValue("@breveresumen", causa._breveresumen)
    		cmd.Parameters.AddWithValue("@elevado", causa._elevado)
    		cmd.Parameters.AddWithValue("@esclarecido", causa._esclarecido )
    		cmd.Parameters.AddWithValue("@fechaelevacion", causa._fechaelevacion)
    		cmd.Parameters.AddWithValue("@observaciones", causa._observaciones)
    		cmd.Parameters.AddWithValue("@expte", causa._expte) 		
    		
            cmd.ExecuteNonQuery()
        End Using
    
    End Sub
    
    
    Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
    	objCausa._expte = ExpteTextBox.Text
    	objCausa._legajo = LegajoTextBox.Text
    	objCausa._fechaingreso = Convert.ToDateTime(FechaIngresoDateTimePicker.Value)
    	objCausa._procedencia = Convert.ToInt32(ProcedenciaComboBox.SelectedValue)
    	objCausa._tipo = Convert.ToInt32(TipoComboBox.SelectedValue)
    	objCausa._delito = Convert.ToInt32(DelitoComboBox.SelectedValue)
    	objCausa._caratula = CaratulaTextBox.Text
    	objCausa._damnificado = DamnificadoTextBox.Text
    	objCausa._acusado = AcusadoTextBox.Text
    	objCausa._detenido = DetenidoTextBox.Text
    	objCausa._fechahecho = Convert.ToDateTime(FechaHechoDateTimePicker.Value)
    	objCausa._lugarhecho = LugarHechoTextBox.Text
    	objCausa._instructor = Convert.ToInt32(InstructorComboBox.SelectedValue)
    	objCausa._fiscal = FiscalTextBox.Text
    	objCausa._breveresumen = BreveResumenTextBox.Text
    	objCausa._elevado = Convert.ToBoolean(ElevadoCheckBox.Checked)
    	objCausa._esclarecido = Convert.ToBoolean(EsclarecidoCheckBox.Checked)
    	objCausa._fechaelevacion = Convert.ToDateTime(FechaElevacionDateTimePicker.Value)
    	objCausa._observaciones = ObservacionesTextBox.Text
    
    	objCausa.EditarProductos(objCausa)
    	MessageBox.Show("Se edito correctamente")
    	Me.Close()
    
    End Sub


    Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó, vótala como útil. Saludos

    • Propuesto como respuesta Pablo Rubio martes, 27 de noviembre de 2018 16:08
    • Marcado como respuesta Frankozub martes, 27 de noviembre de 2018 21:59
    martes, 27 de noviembre de 2018 9:03
  • Me ayudo  mucho gracias....
    martes, 27 de noviembre de 2018 21:59
  • Muchas GRacias Muchachos....
    martes, 27 de noviembre de 2018 21:59