Vb.net 如何使用返回号调用函数

Vb.net 如何使用返回号调用函数,vb.net,stored-procedures,sql-navigator,Vb.net,Stored Procedures,Sql Navigator,原谅我的无知。我正试图从sqlnavigator调用插入函数。我能够捕获prm1.Value,但我不确定如何从sqlnavigator中的包规范中包含返回号(请参见下面的SQL)。当我运行它时,没有向ORACLE添加任何内容 Public Shared Function INSERT_CATEGORY() Dim cmdOraCommand As New OracleCommand Try cmdOraCommand.CommandType = Comman

原谅我的无知。我正试图从
sqlnavigator
调用插入函数。我能够捕获
prm1.Value
,但我不确定如何从sqlnavigator中的包规范中包含
返回号
(请参见下面的SQL)。当我运行它时,没有向ORACLE添加任何内容

 Public Shared Function INSERT_CATEGORY()

    Dim cmdOraCommand As New OracleCommand

    Try
        cmdOraCommand.CommandType = CommandType.StoredProcedure
        cmdOraCommand.CommandText = "SF_ALEX_TEST.insertCategory"

        Dim prm1 As OracleParameter = cmdOraCommand.Parameters.Add( _ 
            "inCategory", OracleType.VarChar)
        prm1.Direction = ParameterDirection.Input
        prm1.Value = strCategory

    Catch ex As Exception
        MsgBox(ex.Message)

    Finally
        cmdOraCommand.Dispose()
    End Try

End Function
SQL/ORACLE

FUNCTION insertCategory(inCategory IN VARCHAR2) RETURN NUMBER

IS
    vReturnedValue NUMBER;
    vID NUMBER;
    vExist NUMBER;
BEGIN
    IF inCategory IS NULL THEN

        vReturnedValue := 0;
        RETURN vReturnedValue;
    ELSE

        BEGIN
            SELECT COUNT(MNT_CATEGORY) INTO vExist
            FROM MNT_CATEGORIES
            WHERE MNT_CATEGORIES.MNT_CATEGORY = upper(inCategory);
        END;

        IF vExist = 0 THEN
            BEGIN
                SELECT SEQ_MNT_LOG.NEXTVAL INTO vID FROM DUAL;

                INSERT INTO MNT_CATEGORIES(MNT_CATEGORY_ID, MNT_CATEGORY)
                VALUES (vID, UPPER(inCategory));
                COMMIT;

                vReturnedValue := vID;
                RETURN vReturnedValue;

                EXCEPTION
                WHEN OTHERS THEN
                    vReturnedValue := SQLCODE;
                    RETURN vReturnedValue;
            END;

        ELSE

            vReturnedValue := vExist * -1;
            RETURN vReturnedValue;
        END IF;
    END IF;
END;

您正在创建命令,但未打开连接或执行命令。
您还创建了一个参数,但没有将其添加到命令中。
如果要捕获返回值,还需要另一个带有
ParameterDirection.Return的参数。在读卡器关闭之前,无法检查该参数的值


这就是我如何更正VB.net代码以正确与Oracle/sqlnavigator通信的方法

谢谢@Scott Hannen

Public Shared Function INSERT_CATEGORY() As Boolean

    Dim cmdMntID As New OracleCommand
    cmdMntID.CommandType = CommandType.StoredProcedure
    cmdMntID.CommandText = "SF_ALEX_TEST.insertCategory"

    Dim prm1 As OracleParameter = cmdMntID.Parameters.Add("inCategory", OracleType.VarChar)
    prm1.Direction = ParameterDirection.Input
    prm1.Value = strCategory

    cmdMntID.Parameters.Add("vID", OracleType.Number).Direction = ParameterDirection.ReturnValue

    cmdMntID.Connection = ORA_CON

    cmdMntID.ExecuteNonQuery()

    vID = cmdMntID.Parameters("vID").Value

    If cmdMntID.Parameters("vID").Value > 1 Then
        Return True
    Else
        Return False
    End If

End Function

斯科特,谢谢你的回答。我打开了一个连接并执行了命令。此外,我还使用了
参数direction.ReturnValue
,一切正常!如果成功了,别忘了将其标记为已回答。谢谢