Visual Basic.NET - El operador '+' no está definido para cadena "INSERT INTO [dbo].[TRANSBIDASOA," ni para tipo 'Object

 
Vista:
sin imagen de perfil
Val: 8
Ha aumentado su posición en 12 puestos en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

El operador '+' no está definido para cadena "INSERT INTO [dbo].[TRANSBIDASOA," ni para tipo 'Object

Publicado por Joel (3 intervenciones) el 15/12/2020 15:40:09
Buenas:

Tengo el siguiente codigo para un Insert en la BBDD:

1
2
3
4
5
"INSERT INTO [dbo].[" + conexion.empresa + "$Documentos] ([Type],[No_],[ID],[Fecha recepcion],[Documento],[Latitud],[Longitud],[Kms],[Nombre fichero],[No entrada],[Leido])
 VALUES ( " + _"(SELECT [Tipo equipamiento] FROM dbo.[" + conexion.empresa + "$Dispositivo] where ID='" + disp("GWHEADER")("IDDEV") + "')," + _                                                               "(SELECT [No_ equipamiento] FROM dbo.[" + conexion.empresa + "$Dispositivo] where ID='" + disp("GWHEADER")("IDDEV") + "')," + _ "'" + System.Guid.NewGuid.ToString() + "'," + _
 "convert(datetime,'" + pfecha(disp("DEVDATA")("CMD")("DAT")("DATE").ToString + " " + disp("DEVDATA")("CMD")("DAT")("TIME").ToString) + "',103)," + _     "''," + _"0," + _ "0," + _  "0," + _
"'" + disp("DEVDATA")("CMD")("DAT")("PICS") + "'," + _"isnull(((SELECT top 1 [No entrada] FROM dbo.[" + conexion.empresa + "$Documentos] ORDER BY [No entrada] DESC)+1)" + _
 ",1),0)", SQLConn)

Pero nos da un error y me estoy volviendo loco encontrando la razon del error.

El operador '+' no está definido para cadena "INSERT INTO [dbo].[TRANSBIDASOA," ni para tipo 'Object()'.:

1
GPRS/SOCKET,13750,{"GWHEADER":{"STATUS":"OK","DESTTYPE":"M2I","IDDEV":"13750"},"DEVDATA":{"CMD":{"DAT":{"KMS":"0.0","DATE":"15/12/2020","LNG":"001:41:30.6780W","DEVFTPID":"0087000000","TYP":"DOCPICS","TIME":"12:37:59","DOCTYPE":"CMR","PICS":["CMR_1608035878262_0087000000.pdf"],"LAT":"043:16:44.5260N","MNO":"21407"},"NAM":"DATAREP","CID":"2944"}}}

A partir del GPRS/SOCKET es el json con el que rellena los campos del INSERT

Aqui os dejo un INSERT Correcto:

1
2
3
INSERT INTO [dbo].[TRANSBIDASOA, S_A_$Documentos] ([Type],[No_],[ID],[Fecha recepcion],[Documento],[Latitud],[Longitud],[Kms],[Nombre fichero],[No entrada],[Leido]) VALUES ( (SELECT [Tipo equipamiento] FROM dbo.[TRANSBIDASOA, S_A_$Dispositivo] where ID='13512'),(SELECT [No_ equipamiento] FROM dbo.[TRANSBIDASOA, S_A_$Dispositivo] where ID='13512'),'968a8348-64a5-415a-9f06-831a033fe4eb',convert(datetime,'15/12/2020 12:11:30',103),'',0,0,0,'DELNOTE_1608034289143_tdim0241.pdf',isnull(((SELECT top 1 [No entrada] FROM dbo.[TRANSBIDASOA, S_A_$Documentos] ORDER BY [No entrada] DESC)+1),1),0)
 
GPRS/SOCKET,13512,{"GWHEADER":{"STATUS":"OK","DESTTYPE":"M2I","IDDEV":"13512"},"DEVDATA":{"CMD":{"DAT":{"KMS":"0.0","DATE":"15/12/2020","LNG":"002:44:44.7960W","DEVFTPID":"tdim0241","TIME":"12:11:30","TYP":"DOCPICS","DOCTYPE":"DELNOTE","PICS":"DELNOTE_1608034289143_tdim0241.pdf","LAT":"042:50:52.3740N","MNO":"21403"},"NAM":"DATAREP","CID":"373138"}}}

De la misma manera a partir del GRPS/SOCKET es el json del que rellena los campos para el INSERT

Muchas gracias, un saludo.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Phil Rob
Val: 3.353
Oro
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

El operador '+' no está definido para cadena "INSERT INTO [dbo].[TRANSBIDASOA," ni para tipo 'Object

Publicado por Phil Rob (1554 intervenciones) el 15/12/2020 16:31:20
Hola,

Si el primero código que muestras mas arriba es la cadena en VB del comando para SQL, el "+" es el operador de concatenación. Es mejo de utilizar "&" para la legibilidad (no mezclar con operador aritmético). Pero el error viene cuando pones este operador dentro la cadena.

Mira en el código que envias :
cuando el + es rojo, es dentro la cadena ==> error.
cuando el + es negro, no error.

Normalmente, tras el "_", ponemos el paso a la línea siguiente, par la legibilidad ...

...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 8
Ha aumentado su posición en 12 puestos en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

El operador '+' no está definido para cadena "INSERT INTO [dbo].[TRANSBIDASOA," ni para tipo 'Object

Publicado por Joel (3 intervenciones) el 15/12/2020 16:42:20
El problema es que para unos dispositivos con una app mas antigua hace bien el INSERT mientras que para los dispositivos mas nuevos no hace bien el INSERT.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Phil Rob
Val: 3.353
Oro
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

El operador '+' no está definido para cadena "INSERT INTO [dbo].[TRANSBIDASOA," ni para tipo 'Object

Publicado por Phil Rob (1554 intervenciones) el 15/12/2020 20:50:53
Revistas tu código.
Antiguo o nuevo, este línea de código contiene errores donde el + es negro.
...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Phil Rob
Val: 3.353
Oro
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

El operador '+' no está definido para cadena "INSERT INTO [dbo].[TRANSBIDASOA," ni para tipo 'Object

Publicado por Phil Rob (1554 intervenciones) el 16/12/2020 09:54:51
Perdona me ...
Este es como he dicho en mi mensaje de ayer a la 16h31.
Los errores están donde los caracteres + están rojo (y no negro) ...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 8
Ha aumentado su posición en 12 puestos en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

El operador '+' no está definido para cadena "INSERT INTO [dbo].[TRANSBIDASOA," ni para tipo 'Object

Publicado por Joel (3 intervenciones) el 16/12/2020 12:20:02
Buenas,

Pues al final el error no estaba en el codigo, estaba en el tipo de variable que mandaban.

En el json que nos mandaban el parametro DOCPICS lo mandaban como array mientras nosotros lo leiamos como String, han hecho ese cambio en el envio del json y ya funciona y nos guarda correctamente todo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Phil Rob
Val: 3.353
Oro
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

El operador '+' no está definido para cadena "INSERT INTO [dbo].[TRANSBIDASOA," ni para tipo 'Object

Publicado por Phil Rob (1554 intervenciones) el 16/12/2020 12:37:11
Muchas gracias para el "feedback".

Que tenga un buen dia ...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar