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
,一切正常!如果成功了,别忘了将其标记为已回答。谢谢