Usuario
Error con sql, salta excepcion

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.
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
- Editado José Barba jueves, 30 de mayo de 2013 15:16
-
-
-
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
-
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ú -
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 -
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
-
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ú
- Editado Pedro Ávila jueves, 30 de mayo de 2013 15:39
-
-
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
-
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
-
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 -
-
-
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
-
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 -
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!