我使用以下代码创建了一个Oracle SP。如果我从SQL developer执行它,那么它运行时没有任何错误/问题。但是,当我尝试从.NET代码调用相同的SP时,抛出一个异常,并显示消息"Oracle.DataAccess.Client.OracleException: ORA-00900: invalid statement“。
Oracle SP代码:
PROCEDURE sp_UpdateLSR(
po_Info OUT VARCHAR2,
pi_gId IN VARCHAR2,
pi_cid IN VARCHAR2
) IS pragma autonomous_transaction;
BEGIN
UPDATE TableName
SET colName = 6603
WHERE colName21 = pi_gId AND COL2 = pi_cid;
COMMIT;
OPEN po_Info FOR SELECT pi_cid as MSG FROM dual;
EXCEPTION
WHEN OTHERS THEN
ROLLBACK;
common.sp_InsertErrorLog('sp_Name', SQLCODE, SQLERRM); -- nothing gets logged
END;我的VB.NET代码:
Public Function SetValues(ByVal gid As String, ByVal CId As String) As Boolean
Dim connection As OracleConnection = New OracleConnection(GetConnectionString())
Dim command As OracleCommand = connection.CreateCommand()
Dim parameters As OracleParameter = New OracleParameter
Dim dataAdapter As New OracleDataAdapter(command)
Dim rtnMsg As String
Dim ds As New DataSet
Try
connection.Open()
command.Parameters.Add("parameters", OracleDbType.RefCursor, DBNull.Value, ParameterDirection.Output)
command.Parameters.Add("pi_gId", OracleDbType.Varchar2, gid, ParameterDirection.Input)
command.Parameters.Add("pi_cid", OracleDbType.Varchar2, CId, ParameterDirection.Input)
command.CommandText = "sp_UpdateLSR"
dataAdapter.Fill(ds)
If ds.Tables(0).Rows.Count > 0 Then
rtnMsg = ds.Tables(0).Rows(0)(0).ToString()
End If
SetLIMSValues = rtnMsg.ToLower() = CharId.ToLower()
Catch ex As Exception
Throw New Exception("error", ex)
Finally
command.Dispose()
parameters.Dispose()
If Data.ConnectionState.Open Then
connection.Close() 'close the connection
End If
End Try
End Function有什么想法吗?
谢谢。
发布于 2021-01-12 04:10:30
在对数据库执行存储过程时,需要告诉命令对象,缺省值为CommandText
添加以下行:
command.CommandType = CommandType.StoredProcedure在设置CommandText之前或之后-只需一个方便记忆和接近的地方。
https://stackoverflow.com/questions/65673276
复制相似问题