none
Error con sql, salta excepcion RRS feed

  • Pregunta

  • Hola a todos!

    Llevo varias horas buscando un error que se produce en mi aplicación pero no se por que salta. lo que el código realiza es:

    Crea una sentencia sql crea un SqlCommand, le añade un valor a una variable de la sentencia y luego ejecuta la sentencia. pero al ejecutarla salta una excepción, ya que lo controlo con un try catch pero al inspeccionar la excepción me sale valor nothing por eso me gustaría saber si tengo algún error en el código o algo

    Saludos y gracias

       abrirconexion()
                    Dim sqlConParam As String = "INSERT INTO Medidas (IndiceFaseMedida, Nombre, Actual, Nominal, UpperTo, LowerTo, Desviacion, fecha, hora) values (" & numFaseMEdicion & ", @nombre,'" & medida(conta).medidaActual & "', '" & medida(conta).medidaNominal & "', '" & medida(conta).upperTo & "', '" & medida(conta).lowerTo & "', '" & medida(conta).desviacion & " ', '" & medida(conta).fecha.ToString("MM/dd/yyyy") & "', '" & medida(conta).hora & "')"
                    Dim SqlCommand2 As New SqlCommand(sqlConParam, conexion)
                    sqlcommand.Parameters.AddWithValue("nombre", medida(conta).nombre)
                    Try
                        SqlCommand2.ExecuteNonQuery()
                    Catch ex As Exception
                        Throw New Exception(ex.Message)
                    End Try
    


    • Editado miguel_remirez jueves, 30 de mayo de 2013 15:08 Se me olvidaba el código
    • Cambiado Enrique M. Montejo viernes, 19 de agosto de 2016 10:51 Pregunta relacionada con acceso a datos.
    jueves, 30 de mayo de 2013 15:07

Todas las respuestas

  • Hola haz verificado que todos los campos contenga información? Por otro lado deberías de usar parámetros para todos los campos:

    	Dim sqlConParam As String = "INSERT INTO Medidas(campo1, campo2, campo3) VALUES (@param1, @param2, @param3)"
    	Dim sqlCommand2 As New SqlCommand(sqlConParam, conexion)
    	cmd.Parameters.AddWithValue("@param1", TextBox1.Text)
    	cmd.Parameters.AddWithValue("@param2", Textbox2.Text)
    cmd.Parameters.AddWithValue("@param3", Textbox3.Text


    Si se solucionó tu consulta no olvides marcar la respuesta. Saludos


    jueves, 30 de mayo de 2013 15:12
  • Hola pq agregar el parámetro nombre? conque finalidad? 

    Pedro Ávila
    "El hombre sabio querrá estar siempre con quien sea mejor que él."
    Lima - Perú

    jueves, 30 de mayo de 2013 15:17
  • si, todo tiene datos y aun encima si copio la query y la pruebo directamente sobre la bbdd funciona correctamente. Y entre eso y que la excepción que salta es nothing me deja muy roto 
    jueves, 30 de mayo de 2013 15:19
  • Hola pq agregar el parámetro nombre? conque finalidad? 

    Pedro Ávila
    "El hombre sabio querrá estar siempre con quien sea mejor que él."
    Lima - Perú

    ¿Te refieres a por que agrego el nombre y no todos no?

    Si es por eso, el nombre es una cadena que puede tener caracteres raros por eso prefiero que la meta el automáticamente para que no produzca yo ningún error. Ya había pensado la posibilidad de que fuese error por algún carácter raro pero he probado a ponerle el nombre que sea y tampoco funciona

    jueves, 30 de mayo de 2013 15:24
  • Usa parametros

    Using cn As SqlConnection = Conexion.Conectar()
    cn.Open()
    Using cmd As SqlCommand = cn.CreateCommand()
    cmd.CommandText = "INSERT INTO Personal(personal_id, linea_id, area_id, nombre, direccion, dni, " & "ubigeo_id, telefono, fecha_nac, cargo_id, lim_cred, lvendedor, foto)" & " 
    VALUES(@personal_id, @linea_id, @area_id, @nombre, @direccion, @dni, " & "@ubigeo_id, @telefono, @fecha_nac, @cargo_id, @lim_cred, @lvendedor, @foto)"

    cmd.Parameters.AddWithValue("@personal_id", personal.Personal_id)
    cmd.Parameters.AddWithValue("@linea_id", personal.Linea_id)
    cmd.Parameters.AddWithValue("@area_id", personal.Area_id)
    cmd.Parameters.AddWithValue("@nombre", personal.Nombre)
    cmd.Parameters.AddWithValue("@direccion", personal.Direccion)
    cmd.Parameters.AddWithValue("@dni", personal.Dni)
    cmd.Parameters.AddWithValue("@ubigeo_id", personal.Ubigeo_id)
    cmd.Parameters.AddWithValue("@telefono", personal.Telefono)
    cmd.Parameters.AddWithValue("@fecha_nac", personal.Fecha_Nac)
    cmd.Parameters.AddWithValue("@cargo_id", personal.Cargo_Id)
    cmd.Parameters.AddWithValue("@lim_cred", personal.Lim_Cred)
    cmd.Parameters.AddWithValue("@lvendedor", personal.lVendedor)
    cmd.Parameters.AddWithValue("@foto", personal.Foto)
    cmd.ExecuteNonQuery()
    Return String.Empty
    End Using




    Pedro Ávila
    "El hombre sabio querrá estar siempre con quien sea mejor que él."
    Lima - Perú

    jueves, 30 de mayo de 2013 15:26
  • no entiendo la mezcolanza de codigo, si veo que usas

    .Parameters.AddWithValue

    porque el resto de los valores los concatenas en un string en lugar de usar todo con parametros ?

    porque todos los valores los pones como parametro

    ---

    porque no solo haces

    Catch ex As Exception
       MessageBox.Show(ex.Message)
    End Try

    para ver el problema

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    jueves, 30 de mayo de 2013 15:26
  • Ya lo e puesto con parámetros y mismo error.

    Y por supuesto la excepción sigue sin tener nada

       abrirconexion()
                    Dim sqlConParam As String = "INSERT INTO Medidas (IndiceFaseMedida, Nombre, Actual, Nominal, UpperTo, LowerTo, Desviacion, fecha, hora) values (@numFase, @nobre,@medida, @nominal, @upper, @lowerTo, @desvi, @fecha , @hora)"
                    Dim SqlCommand2 As New SqlCommand(sqlConParam, conexion)
                    sqlcommand.Parameters.AddWithValue("nobre", medida(conta).nombre)
                    sqlcommand.Parameters.AddWithValue("numFase", numFaseMEdicion)
                    sqlcommand.Parameters.AddWithValue("medida", medida(conta).medidaActual)
                    sqlcommand.Parameters.AddWithValue("nominal", medida(conta).medidaNominal)
                    sqlcommand.Parameters.AddWithValue("upper", medida(conta).upperTo)
                    sqlcommand.Parameters.AddWithValue("lower", medida(conta).lowerTo)
                    sqlcommand.Parameters.AddWithValue("desvi", medida(conta).desviacion)
                    sqlcommand.Parameters.AddWithValue("fecha", medida(conta).fecha.ToString("MM/dd/yyyy"))
                    sqlcommand.Parameters.AddWithValue("hora", medida(conta).hora)
                    Try
                        SqlCommand2.ExecuteNonQuery()
                    Catch ex As System.Data.SqlClient.SqlException
                        Throw New Exception(ex.Message)
                    End Try

    Saludos y gracias

    jueves, 30 de mayo de 2013 15:35
  • Que dice el error pon un punto de interrupción donde salta y pon el mouse encima del parametro haber que tipo de dato trae y si puedes mandar una imagen del error.

    Tienes que ver el tipo de dato que trae el parámetro y el tipo de dato del campo en la DB


    Pedro Ávila
    "El hombre sabio querrá estar siempre con quien sea mejor que él."
    Lima - Perú



    jueves, 30 de mayo de 2013 15:38
  • y si solo usas

    Catch ex As Exception
       MessageBox.Show(ex.Message)
    End Try

    que mensaje puedes observar?


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    jueves, 30 de mayo de 2013 15:42
  • Como dice el amigo Leandro lo mejor es mandar un MessageBox.Show con el mensaje de error, para que así puedas detectar que cosa esta sucediendo, Tal vez el query este bien y el error se este dando en el método abrirconexion()

    Donald A. Sullon Porras Analista de Sistemas

    jueves, 30 de mayo de 2013 16:33
  • Hola de nuevo os adjunto una imgen inspeccionando la excepcion

    Como podéis ver ex es nothing, y la verdad es que estoy perdidísimo ahora mismo, ya que no se de que puede ser.

    Por cierto, en cuanto a lo de abrirconexion funciona correctamente, ya que lo uso en el resto del código y funciona correctamente. 

       ' abre la conexion al base de datos si esta cerrada
        Private Sub abrirconexion()
    
            Try
                If (conexion.State = ConnectionState.Closed) Then
                    conexion.Open()
                End If
            Catch ex As Exception
                Throw New Exception(ex.Message)
            End Try
    
    
        End Sub

    Saludos

    viernes, 31 de mayo de 2013 6:26
  • pero alli no se alcanza a ver sonde estas situado cuando inspeccionas esa "ex"

    quizas despues del error te situas en un ambito donde esta ya no es valida por eso es nothing

    debes poner el breakpoint justo dentro del Catch para que esta sea valida, pero sigo pensando que deberias motrar la exception con un mensaje, en todo tu codigo solo generas un nuevo error con Throw New, pero me pregunto donde los muestras ? o porque no lo logueas el mesnaje a un archivo

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    viernes, 31 de mayo de 2013 6:33
  • Bueno ya se por que se produce el error, pero no se por que la excepcion es nothing.

    Probando con messagebox.sho(ex.message) salta must declare the scalar variable @numFase

    viernes, 31 de mayo de 2013 6:40
  • pero si ahora puede ver el messagebox.show(ex.message)

    entonces ex no es nothing, porque sino nunca verias ese mensaje

    bueno el mesnaje ahora esta mas claro, falta definir un parametro

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    viernes, 31 de mayo de 2013 6:47
  • es un poco raro la verdad,  si inspecciono ex sigue siendo nothing, si inspecciono ex.message sigue siendo nothing pero salta el mensageBox y me da datos. No me había pasado nunca y la verdad es muy raro.

    Y en cuanto a lo de faltar un parámetro he vuelto a revisar los parámetros de la tabla y no me falta ninguno que yo sepa.

    Como podéis ver en la tabla hay 10 pero en mi query solo hay 9 pero es a causa de que el primer dato de la tabla es autonumérico

    Saludos

    viernes, 31 de mayo de 2013 7:22
  • Hola:
    Prueba a cambiar esta linea
    sqlcommand.Parameters.AddWithValue("nobre", medida(conta).nombre)

    Por esta otra
    sqlcommand.Parameters.AddWithValue("@nobre", medida(conta).nombre)

    P.D.
    Lo mismo para las demas lineas porque no has puesto la @

    Un Saludo dsde Bilbo
    Carlos

    viernes, 31 de mayo de 2013 8:15
  • Lo primero muchas gracias por la ayuda a todos, también decir que he probado añadiendo la @ al principio de todos y no e conseguido nada

    Al final e probado concatenando todos los valores en la string y funciona.

    Es decir con el parameters.addwithvalue no funciona, el por que no se, posiblemente sea algún error mio tonto pero no me funciona

    Ahora ya esta solucionado de esta manera

    Muchas gracias a todos los que me habéis ayudado!

    viernes, 31 de mayo de 2013 8:38