Оператор VB.NET '&' не определен для строки и типа 'Внутреннее поле' - PullRequest
0 голосов
/ 11 июля 2019

Фон

В настоящее время работа над плагином в ArcMap выполнена в VBA с начала 2000 года и рефакторинг его в VB.NET. База данных является базой данных MS Access.

Довольно плохо знаком с VB.NET и кодированием в целом.

Error

Проблема, с которой я сталкиваюсь, заключается в том, что я получаю сообщение об ошибке:

InvalidCastException не обработано.

Произошло необработанное исключение типа «System.InvalidCastException» в Microsoft.VisualBasic.dll

Дополнительная информация: оператор '&' не определен для строки "UPDATE CustomerArea SET Area_m2 = 547" и типа "InternalField".

Код

Dim nr
Dim area_polygon_excl_faktor As Double
Dim area_db

Do While Not AdoRS.BOF
   nr = AdoRS("nr")
   area_db = CDbl(AdoRS("area_m2").Value)

   Dim result As MsgBoxResult
   result = MsgBox(aAttrID(index) & "  " & area_db & "  " & area_polygon_exkl_faktor & "  Would you like to update the area?", vbYesNoCancel, "Update of area")

   If result = MsgBoxResult.Yes Then
      strSqlUpdateArea = "UPDATE CustomerArea SET Area_m2='" & area_polygon_excl_faktor & "' WHERE Nr= '" & nr

      AdoConn.Execute(strSqlUpdateArea)

   ElseIf result = MsgBoxResult.No Then

      MsgBox("You have decided not to update the area")

   End If

AdoRS - это ADODB.Recordset. Проблема, с которой я сталкиваюсь, находится на линии:

strSqlUpdateArea = "UPDATE CustomerArea SET Area_m2='" & area_polygon_excl_faktor & "' WHERE Nr= '" & nr

Я пытался переписать его несколько раз и даже добавить Convert.toString в строке nr = AdoRS ("nr"), , но безуспешно. Я знаю, что Nr в Access - это AutoNumber (LongInteger).

Ответы [ 2 ]

0 голосов
/ 16 июля 2019

Решением было то, что мне пришлось правильно преобразовать тип InternalField в строку и выполнить шаги в правильном порядке.

Dim sNr As String
Dim area_polygon_excl_faktor As Double
Dim area_db

Do While Not AdoRS.BOF
   sNr = Convert.ToString(AdoRS("nr").Value)
   area_db = CDbl(AdoRS("area_m2").Value)

   Dim result As MsgBoxResult
   result = MsgBox(aAttrID(index) & "  " & area_db & "  " & area_polygon_excl_faktor & "  Would you like to update the area?", vbYesNoCancel, "Update of area")

   If result = MsgBoxResult.Yes Then
      strSqlUpdateArea = "UPDATE CustomerArea Set Area_m2='" & area_polygon_excl_faktor & "' WHERE Nr=" & sNr

   AdoConn.Execute(strSqlUpdateArea)
   ElseIf result = MsgBoxResult.No Then
      MsgBox("You have decided not to update the area")
   End If
0 голосов
/ 11 июля 2019

Старый код VBA выглядел следующим образом ...

Тогда без кавычек, и ставить десятичный разделитель в точку:

Dim format As System.Globalization.CultureInfo

format = System.Globalization.CultureInfo.InvariantCulture

strSqlUpdateArea = "UPDATE CustomerArea SET Area_m2 = " & area_polygon_excl_faktor.ToString(format) & " WHERE Nr = " & nr.ToString(format)
...