C# 如何知道存储过程是否正确执行?

C# 如何知道存储过程是否正确执行?,c#,oracle,stored-procedures,odp.net,C#,Oracle,Stored Procedures,Odp.net,我正在调用一个在数据库中插入记录的存储过程,但我想知道如何判断该存储过程是否正确执行?为了知道插入了多少,可以从网络上验证 我添加了用于调用存储过程的代码: public void EjecutaSP(string NomSP, ParametroOracle[] Parameter, string OracleCon) { OracleCon = Rijndael.Desencriptar(strOracleCon); OracleConnection oracleCon =

我正在调用一个在数据库中插入记录的存储过程,但我想知道如何判断该存储过程是否正确执行?为了知道插入了多少,可以从网络上验证

我添加了用于调用存储过程的代码:

public void EjecutaSP(string NomSP, ParametroOracle[] Parameter, string OracleCon)
{
    OracleCon = Rijndael.Desencriptar(strOracleCon);
    OracleConnection oracleCon = new OracleConnection(OracleCon);

    try
    {
        OracleCommand cmd = new OracleCommand(NomSP, oracleCon);
        cmd.CommandType = CommandType.StoredProcedure;

        cmd.Parameters.Add("DateProcess", "OracleType.VarChar").Value = "'2019-05-29'";
        cmd.Parameters.Add("EmployeeGroup", "OracleType.Number").Value = 555501;
        cmd.Parameters.Add("IdEmployee", "OracleType.Number").Value = 555501;

        cmd.Parameters.Add("NomEmployee", "OracleType.VarChar").Value = "'Espanol'";

        OracleDataAdapter da = new OracleDataAdapter(cmd);
        DataTable dtTable = new DataTable();

        da.Fill(dtTable);
    }
    catch (Exception ex)
    {
        string strSP = NomSP;
        int intPar = Parameter.Length;

        for (int i = 0; i < intPar; i++)
            strSP += " ," + Parameter[i].Valor;

        Exception _ex = new Exception("Error en SP: " + strSP, ex.InnerException);
        throw _ex;
    }
    finally
    {
        oracleCon.Close();
        oracleCon.Dispose();
    }
}    
运行存储过程的进程已经运行了,我只想知道是否有任何语句可以帮助知道存储过程是否正确执行,因为存储过程不会返回任何特殊数据

你需要澄清你的问题。您正在插入或选择数据吗? 我正在调用插入记录的存储过程。da.FilldtTable

如果选择数据,则SP必须具有RefCursor out参数

cmd.Parameters.Add(pdata, OracleDbType.RefCursor) // NOTE correct usage
创建或替换程序X pDataout SYS\U REFCURSOR。。。。 因此需要添加相应的参数

cmd.Parameters.Add(pdata, OracleDbType.RefCursor) // NOTE correct usage
对你的问题。。。存储过程不会返回受影响的记录数,比如说,使用ExecuteOnQuery。如果您只是想知道SP是否成功,是否没有错误,那么它就是。如果您无法处理SP中的错误,并且出现故障,则所有操作都将回滚。要么全力以赴,要么一事无成。您可以在c中捕获异常并使用它。避免在SP内部处理错误。 创建或替换过程X。。。 像 . . . 开始 插入到。 终止 如果SP中有多个DML,并且希望知道受影响的行数,则需要为其构建SP

创建或替换程序X无效的输出编号 像 . . . 开始 插入到。 pAffected:=SQL%ROWCOUNT; 插入B。 pAffected:=pAffected+SQL%ROWCOUNT; 终止 在c中,只需要得到值

 cmd.Parameters.Add("pAffected", OracleDbType.Decimal, ParameterDirection.Output)
 . . .  . . . 
 int count = ((OracleDecimal)cmd.Parameters["pAffected"].Value).ToInt32();
代码构造 使用var conn=新的OracleConnection。。。。。。。 使用var cmd=new OracleCommand。。。。。。。 { //…此处的代码。。。。。。。。 如果需要填写表格,请使用var adp=new OracleDataAdapter..// { //填表 } } //注:无需使用自动关闭/处置。内部提交的事务。 //如果SP出错,则所有内容都将回滚。将其包装为“Try/CatchOracleException-ex”`
您只需在存储过程中返回插入的记录并检查空值即可。为什么要将日期作为varchar传递?“Espanol”中是否有这些参数?如果未使用,请在SP中使用try-catch,并添加out参数,在成功和数据库出现异常/失败时返回一些唯一值。我通常这样做,从来没有遇到过麻烦。并在你的c。