Error en insert

23/03/2005 - 15:53 por Jorge Landaeta | Informe spam
Buenos días, estoy tratando de hacer un insert en VB.NET y me da el siguiente
error:

Excepción no controlada del tipo
'System.InvalidCastException' en microsoft.visualbasic.dll

Información adicional: Cast from string "insert into wo(id, id_user, id_c"
to type 'Double' is not valid.

Para ver si pueden ayudarme aquí les muestro el insert:

enddate = Me.dtenddate.Value
requestdate = Me.dtreqdate.Value
Dim strConn As String = "Server=MYSRVR;Password=MYPWD; Persist Security
Info=True;User ID=sa;Initial Catalog=wo" 'String Connection to DB

Dim conn As New SqlConnection(strConn)
Dim objdrnum As SqlCommand
Dim sqlnum As String = "insert into wo(id, id_user, id_country, id_soft,
id_prog, id_phone, wotype, cycle, requestdate, enddate, requestact,
description, observations, status, new) values ('" _
+ Me.lblcode.Text + "', " _
+ userid + ", " _
+ Me.countrycombo.SelectedIndex + 1 + ", " _
+ Me.softwarecombo.SelectedIndex + 1 + ", " _
+ Me.progcombo.SelectedIndex + 1 + ", " _
+ Me.phonecombo.SelectedIndex + 1 + ", " _
+ 1 + ", " _
+ Me.cyclecombo.SelectedIndex + 1 + ", '" _
+ requestdate + "', '" _
+ enddate + "', '" _
+ Me.txtactivity.Text + "', '" _
+ Me.txtobservations.Text + "', " _
+ 1 + ", " _
+ 1 + ")"
Dim Cmdnum As New SqlCommand(sqlnum, conn)
conn.Open()
objdrnum.ExecuteNonQuery()
objdrnum.Connection.Close()

Preguntas similare

Leer las respuestas

#1 Eduardo A. Morcillo [MS MVP VB]
23/03/2005 - 18:14 | Informe spam
El problema es el uso del operador + para concatenar cadenas. El error viene
de que + intenta realizar una suma aritmetica de la cadena con el valor de
tipo Double que contiene una de las variables. Para concatenar Strings
utiliza el operador & o String.Concat (son exactamente lo mismo ya que el
compilador convierte los & en llamadas a String.Concat).

De todas formas, como el problema es con una sentencia SQL lo mejor seria no
concatenar nada y usar parametros. La concatenacion tiene problemas de
formato y seguridad que se resuelven con el uso de parametros. Ademas usar
parametros deja el codigo mucho mas entendible. Ejemplo:

Dim sqlnum As String = _
"INSERT INTO WO (id, id_user, id_country, id_soft, id_prog, " & _
"id_phone, wotype, cycle, requestdate, enddate, " & _
"requestact, description, observations, status, new) " &
_
"VALUES (@id, @id_user, @id_country, @id_soft, @id_prog, " & _
"@id_phone, @wotype, @cycle, @requestdate, @enddate, " & _
"@requestact, @description, @observations, @status, @new)"

Dim Cmdnum As New SqlCommand(sqlnum, conn)

cmdnum.Parameters.Add("@Id", Me.lblcode.Text)
' ...
cmdnum.Parameters.Add("@new", True)

conn.Open()
objdrnum.ExecuteNonQuery()
objdrnum.Connection.Close()

Eduardo A. Morcillo [MS MVP VB]
http://www.mvps.org/emorcillo
https://mvp.support.microsoft.com/p...4EF5A4191C
Respuesta Responder a este mensaje
#2 Jorge Landaeta
23/03/2005 - 20:53 | Informe spam
Hice lo que me dijiste y me dio otro error pero esta vez en el
objdrnum.ExecuteNonQuery()

Dice:

Excepción no controlada del tipo 'System.NullReferenceException' en Work
Orders System.exe

Información adicional: Object reference not set to an instance of an object.

Gracias por su atención y ayuda

"Eduardo A. Morcillo [MS MVP VB]" wrote:

El problema es el uso del operador + para concatenar cadenas. El error viene
de que + intenta realizar una suma aritmetica de la cadena con el valor de
tipo Double que contiene una de las variables. Para concatenar Strings
utiliza el operador & o String.Concat (son exactamente lo mismo ya que el
compilador convierte los & en llamadas a String.Concat).

De todas formas, como el problema es con una sentencia SQL lo mejor seria no
concatenar nada y usar parametros. La concatenacion tiene problemas de
formato y seguridad que se resuelven con el uso de parametros. Ademas usar
parametros deja el codigo mucho mas entendible. Ejemplo:

Dim sqlnum As String = _
"INSERT INTO WO (id, id_user, id_country, id_soft, id_prog, " & _
"id_phone, wotype, cycle, requestdate, enddate, " & _
"requestact, description, observations, status, new) " &
_
"VALUES (@id, @id_user, @id_country, @id_soft, @id_prog, " & _
"@id_phone, @wotype, @cycle, @requestdate, @enddate, " & _
"@requestact, @description, @observations, @status, @new)"

Dim Cmdnum As New SqlCommand(sqlnum, conn)

cmdnum.Parameters.Add("@Id", Me.lblcode.Text)
' ...
cmdnum.Parameters.Add("@new", True)

conn.Open()
objdrnum.ExecuteNonQuery()
objdrnum.Connection.Close()

Eduardo A. Morcillo [MS MVP VB]
http://www.mvps.org/emorcillo
https://mvp.support.microsoft.com/p...4EF5A4191C



Respuesta Responder a este mensaje
#3 Eduardo A. Morcillo [MS MVP VB]
23/03/2005 - 23:49 | Informe spam
Bueno, si has copiado exactamente el codigo del mensaje anterior entonce
tiene un error (del que no me habia dado cuenta) y que venia del codigo
original de tu mensaje. La variable objdrnum no contiene la referencia al
comando sino que esta en la variable que tiene la referencia al comando esta
en cmdnum. Entonces deberia ser mas o menos asi:

Try
conn.Open()
cmdnum.ExecuteNonQuery()
Finally
conn.Close()
End Try

Eduardo A. Morcillo [MS MVP VB]
http://www.mvps.org/emorcillo
https://mvp.support.microsoft.com/p...4EF5A4191C
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida