Principales respuestas
La conversion de la cadena update from Causas set Procedenc en el tipo Doubl; no es VAlida.

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 Subtengo 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.-
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
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
-
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
-
-