Member 14056158 Ответов: 1

Как вызвать DB2 UDTF из VB.NET


Я пишу VB.Сетевое приложение, которому необходимо вызвать пользовательскую табличную функцию в DB2. UDTF DB2 корректно работает из запроса DB2, но я не могу понять, как его вызвать из VB.Net.

Я приложил текстовый документ ( HereIsTheCode.txt ) из числа VB.Net определение функции я написал для вызова UDTF и растрового изображения ( HereIsTheQuery.bmp ) UDTF как выполняемого из запроса DB2. Я разрабатываю бизнес-приложения, которые интегрируются как С MS/SQL, так и с IBM/DB2 в течение нескольких лет, но это первый раз, когда мне пришлось вызвать UDTF, и до сих пор: никакой радости.......

UDTF возвращает одну таблицу записей, из которой мне нужны два значения полей (Код ошибки и Errortext не)

В режиме отладки выполнение кода никогда не возвращается из строки myDB2DataReader = myDB2Command.Метода executereader

Что я уже пробовал:

Вот это самое VB.Net определение функции


Public Function PumpTransaction() As Boolean
            Dim thisResult As Boolean = True
            Status = 0
            StatusMessage = "Success."

            Dim myDB2Connection As iDB2Connection
            Dim myDB2Command As iDB2Command
            Dim myDB2DataReader As iDB2DataReader

            'Define the ODBC Connection string
            myDB2Connection = New iDB2Connection("DataSource=" & globalConnectionSelected & _
                                                 "; UserID=" & _
                                                 constAS400_UID & _
                                                 ";Password=" & _
                                                 constAS400_PWD)

            Dim myConnectionOpen As Boolean = False
            Try
                'Open the Connection
                myDB2Connection.Open()
                myConnectionOpen = True

                Dim thisCommandString As String = "  SELECT ERRORCODE, ERRORTEXT FROM TABLE(DPLIB06.SMBB("
                thisCommandString += CoNo.ToString + ",'" + _CallerID.Trim.ToUpper + "','" + PartNo.Trim.ToUpper + "','"
                thisCommandString += LocFrom.Trim.ToUpper + "','" + LocTo.Trim.ToUpper + "'," + CStr(Qty) + ")) RESULTS"

                myDB2Command = New iDB2Command(thisCommandString, myDB2Connection)

                Dim myCommandString As String = myDB2Command.CommandText

                myDB2DataReader = myDB2Command.ExecuteReader

                If myDB2DataReader.HasRows Then
                    myDB2DataReader.Read()
                End If
                myDB2DataReader.Close()
            Catch ex As Exception
                Status = -1
                StatusMessage = String.Format("{0}: {1}", System.Reflection.MethodBase.GetCurrentMethod().Name, ex.Message)
            End Try

            If myConnectionOpen Then
                myDB2Connection.Close()
            End If

        End Function


Это запрос DB2, который успешно работает изнутри Клиентские решения IBM i Access - Запуск SQL скриптов возврат ERRORCODE = 0 и ERRORTEXT = "успех"
SELECT ERRORCODE, ERRORTEXT
FROM TABLE(DPLIB06.SMBB(9,'SMBB_009','G1-515011','TESTENG','BFLSH',10)) RESULTS

1 Ответов

Рейтинг:
11

Member 14056158

Я использовал производственный логин в соединении, но обращался к базе данных разработки. Производственные учетные данные не имеют очереди вывода, определенной для базы данных разработки, поэтому .Net call (.ExecuteReader) к DB2 UDTF записывал ошибку в какой-то журнал DB2/AS400 и останавливался.

Сегодня утром я узнал о застопорившемся процессе: журнал показал идентификатор пользователя и ошибку очереди вывода.