Visual Basic с Oracle 11g с использованием КУРСОРА ССЫЛКИ НЕ работает

#vb.net #oracle #recordset #ref-cursor

#vb.net #Oracle #набор записей #ref-cursor

Вопрос:

Я использую Visual Basic 6 для подключения к Oracle 11g. Да, я могу успешно подключиться к базе данных. Проблема заключается в получении наборов записей из базы данных. Я создал пакет oracle, как показано ниже:

Пакет:

 CREATE OR REPLACE PACKAGE PKG_BASECODE AS

TYPE T_CURSOR IS REF CURSOR;

--// customer
PROCEDURE CustomerCode (
    I_CUST_CODE          IN VARCHAR2
    , I_CUST_NAME        IN VARCHAR2
    , customer_cursor    OUT T_CURSOR
);

END PKG_BASECODE;
/
 

Тело:

 CREATE OR REPLACE PACKAGE BODY PKG_BASECODE AS

--// customer
PROCEDURE CustomerCode (
    I_CUST_CODE          IN VARCHAR2
    , I_CUST_NAME        IN VARCHAR2
    , customer_cursor    OUT T_CURSOR
)
IS
    BEGIN
    OPEN customer_cursor FOR
    SELECT  CUST_CODE      AS KEYVALUE
            , CUST_NAME    AS DATAVALUE
    FROM    CUSTOMER_MASTER
    WHERE   CUST_CODE      LIKE I_CUST_CODE || '%'
    AND     CUST_NAME      LIKE I_CUST_NAME || '%'
    ORDER BY CUST_NAME ASC
    ;
    END CustomerCode;


END PKG_BASECODE;
/
 

Он отлично работает с C #.
Я уже протестировал.

Теперь у меня есть исходные коды Visual Basic 6 ниже:

 Dim rst As ADODB.Recordset
Dim cmd As ADODB.Command
Dim input1 As ADODB.Parameter
Dim input2 As ADODB.Parameter
Dim output1 As ADODB.Parameter
Set cmd = CreateObject("ADODB.Command")
With cmd
    .ActiveConnection = tmpDB_Total

    .CommandText = "PKG_BASECODE.CustomerCode"
    .CommandType = adCmdStoredProc

    .Parameters.Append .CreateParameter("I_CUST_CODE", adVarChar, adParamInput, 10, "")
    .Parameters.Append .CreateParameter("I_CUST_NAME", adVarChar, adParamInput, 50, "")
    .Parameters.Append .CreateParameter("CustomerCode", adVarChar, adParamReturnValue)
    Set rst = .Execute
End With

If Not rst.BOF And Not rst.EOF Then
    Do Until rst.EOF
        Debug.Print rst.Fields(1).Value amp; "," amp; rst.Fields(0).Value
        rst.MoveNext
    Loop
End If
 

И источник подключения указан ниже:

 tmpDB_Total.Open "Provider=OraOLEDB.Oracle;" _
                 amp; "Password=mes123;" _
                 amp; "User ID=mes;" _
                 amp; "Persist Security Info=True;" _
                 amp; "Data Source=stmdev;"
 

И я получаю сообщение об ошибке, касающееся параметров.
Сообщение об ошибке написано на корейском языке, поэтому я не могу написать сразу.
Пожалуйста, поймите меня.
Кто-нибудь может помочь мне с этой проблемой?

Ответ №1:

У вас там есть дополнительный параметр. Просто не пытайтесь добавлять что-либо для этого третьего параметра, и он должен работать. Обратите внимание, что вам нужно будет установить Cmd.Properties("PLSQLRSet") = TRUE

Комментарии:

1. Я не знал, как принять ваш ответ. Теперь я нашел, как это сделать. В любом случае, большое спасибо.