C# Oracle存储过程仅返回-1时的疑难解答

C# Oracle存储过程仅返回-1时的疑难解答,c#,stored-procedures,odp.net,C#,Stored Procedures,Odp.net,我有一个存储过程,当我在数据库中直接手动测试它时,它就可以工作。 该过程不会返回任何内容。而且,当我手动测试它时,它工作得很好,所以我不在这里显示它 但是当我从代码中调用它时,我得到了返回值-1,我理解为“出了问题” 返回System.Data.Common.DbCommand.ExecuteOnQuery-1 设置断点并没有给我太多关于出错原因的信息。 在这种情况下,如何进行故障排除 提前谢谢 当我从代码中调用它时,我得到了返回值-1,我理解为“出了问题” 这是不正确的 对于UPDATE、IN

我有一个存储过程,当我在数据库中直接手动测试它时,它就可以工作。 该过程不会返回任何内容。而且,当我手动测试它时,它工作得很好,所以我不在这里显示它

但是当我从代码中调用它时,我得到了返回值-1,我理解为“出了问题”

返回System.Data.Common.DbCommand.ExecuteOnQuery-1

设置断点并没有给我太多关于出错原因的信息。 在这种情况下,如何进行故障排除

提前谢谢

当我从代码中调用它时,我得到了返回值-1,我理解为“出了问题”

这是不正确的

对于UPDATE、INSERT和DELETE语句,返回值是受命令影响的行数。对于所有其他类型的语句,返回值是-1

当出现问题时,它将抛出异常


Oracle存储过程甚至没有返回值。它们可以有输出参数,包括带有输出sysrefcursor参数的结果集,但它们没有返回值。

这并不一定意味着出现了任何问题,
ExecuteNonQuery
在没有受影响的行或存在回滚时返回-1。即使问题的标题也包含错误的前提,即SP返回任何值。事实并非如此。你的身体里也有一些假前提。请阅读我对这里答案的评论-->。这就是我没有对你的问题投赞成票的原因之一。如果您只想在SP返回(-1)时问“为什么”
ExecuteNonQuery
,我不会再给出另一个答案。我会要求你改进你的。OP犯了一个主要错误—这不是存储过程返回。这是从
命令.ExecuteNonQuery()
返回的。SP不返回任何值。对于不返回记录数的语句,解决方案是返回(-1)。因为,例如,
Update
可以返回(0)条更新记录。您有什么改进建议?OP thinks-1返回表示故障。我贴了一个修正了这一点的文档引用。你应该解释一下我的评论。这个问题听起来像是SP返回了一个“仅返回-1时对Oracle存储过程进行故障排除”
command.CommandText = Properties.Settings.Default.OracleProcedureNewCable;
                command.CommandType = System.Data.CommandType.StoredProcedure;
                command.BindByName = true;

command.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Varchar2, ParameterName = "p_tag_id", Value = (object)cable.TagId ?? DBNull.Value });

return command.ExecuteNonQuery();