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。