Я работаю с Unidata и ADO.NET с помощью провайдера U2 .NET.Это может быть выстрелом в темноте, поскольку в наши дни не так много ресурсов для Unidata и .NET.
В настоящее время я могу вернуть только одну запись MV 153926þIþ
и проанализировать ее, используя MV_To_DataTable
.Я хотел бы вернуть несколько записей, таких как 153926þIþÿ153926þIþÿ
.Есть ли встроенный механизм для этого?Боюсь, мне придется написать расширение, чтобы лучше всего меня приспособить.
Я извлекаю одну запись в подпрограмме unidata следующим образом:
SUBROUTINE GETITEMS(results)
EXECUTESQL "SELECT ID, STATUS, DESC FROM ITEMS TO GETITEM_LIST;"
DONE = 0
RECCNT = 0
LOOP
RECCNT += 1
READNEXTTUPLE REC FROM "GETITEM_LIST" ELSE DONE = 1
results := REC
IF RECCNT EQ 1 THEN EXIT
UNTIL DONE
REPEAT
results
CLEARSQL
RETURN
Простая подпрограмма, которая возвращает одну запись без какой-либо записи.Метки.Это работает, когда я использую метод U2Parameter
, называемый MV_To_DataTable
, чтобы разобрать его в существующую таблицу данных.
Однако, когда я изменяю строку подпрограммы: results:= REC
на results:= REC : @RM
, чтобы добавить метки записи и удалитьпредел 1, MV_To_DataTable
больше не может правильно его анализировать.Фактически он выдаст System.IndexOutOfRangeException: Cannot find column 3.
Код VB.NET:
' ... Open database connection called U2Connection ...
Dim cmd = U2Connection.CreateCommand
cmd.CommandText = "CALL GETITEMS(?)"
cmd.CommandType = CommandType.StoredProcedure
cmd.Parameters.Clear()
cmd.Parameters.Add(New U2Parameter("@arg1", "") With {.Direction = ParameterDirection.InputOutput})
cmd.ExecuteNonQuery()
Dim tb As New DataTable
tb.Columns.Add("ID")
tb.Columns.Add("STATUS")
tb.Columns.Add("DESC")
cmd.Parameters.Item(0).MV_To_DataTable(tb) ' Error happens here
' System.IndexOutOfRangeException: Cannot find column 3.
Похоже, что метод не разделяет записи.Я мог бы неправильно истолковать это.
***** ОБНОВЛЕНИЕ 2/9/2019
Я пошел дальше и написал свой собственный метод расширения для поддержки моего формата возврата с маркерами записи.Он заполняет таблицу данными записями, позволяющими мне продолжить, как обычно.