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()
 

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

Preguntas similares