C# 我无法通过Oracle实现同样的效果,并引发应用程序错误。这是我称之为“日志表”的方法,如果我不解决OracleConnection.InfoMessage事件的使用问题,将使用这种方法。这个问题正是关于Oracle DB和InfoMessage事件的。我

C# 我无法通过Oracle实现同样的效果,并引发应用程序错误。这是我称之为“日志表”的方法,如果我不解决OracleConnection.InfoMessage事件的使用问题,将使用这种方法。这个问题正是关于Oracle DB和InfoMessage事件的。我,c#,oracle,odp.net,C#,Oracle,Odp.net,我无法通过Oracle实现同样的效果,并引发应用程序错误。这是我称之为“日志表”的方法,如果我不解决OracleConnection.InfoMessage事件的使用问题,将使用这种方法。这个问题正是关于Oracle DB和InfoMessage事件的。我已经使用SqlConnection和InfoMessage事件从长时间运行的过程中捕获了RAISEERROR,并且它按照预期工作。但是,我无法用Oracle实现同样的效果,并提出应用程序错误。 private void OnInfoMessag

我无法通过Oracle实现同样的效果,并引发应用程序错误。这是我称之为“日志表”的方法,如果我不解决OracleConnection.InfoMessage事件的使用问题,将使用这种方法。这个问题正是关于Oracle DB和InfoMessage事件的。我已经使用SqlConnection和InfoMessage事件从长时间运行的过程中捕获了RAISEERROR,并且它按照预期工作。但是,我无法用Oracle实现同样的效果,并提出应用程序错误。
private void OnInfoMessage(object sender, OracleInfoMessageEventArgs e)
{
  foreach (OracleError err in e.Errors)
  {
    ShowSomeText(err.Message);
  }
}
    drop sequence sq;
    create sequence s1; 

    drop table status;
    create table status(id number, descriptions varchar2(100));
    CREATE OR REPLACE PROCEDURE update_status (id_in IN Number,description_in IN varchar2,dml_type_in IN varchar2) AS
      PRAGMA AUTONOMOUS_TRANSACTION;
      id_1 number:= id_in;
      description_1 varchar2(100):=description_in;
      dml_type_1 char(1):=dml_type_in;
    BEGIN
    if dml_type_1='I' then
     insert into status values(id_1, description_1);
    elsif dml_type_1 = 'U' then
     update status set descriptions=description_1 where id=id_1;
    else 
     delete from status where id=id_1;
    end if;
    commit;
    END;
    CREATE OR REPLACE PROCEDURE SP1 (id_in IN number)
    AS
    BEGIN
    --step 1
    update_status(id_in,'Entering Step 1','I');
     dbms_lock.sleep(30);
    --step 2
    update_status(id_in,'Entering Step 2','U');
     dbms_lock.sleep(30);
    --step 3
    update_status(id_in,'Entering Step 3','U');
     dbms_lock.sleep(30);
    update_status(id_in,NULL,'D');
    END;

    --Run procedure from 1st session
    exec sp1(<whatever the sequence value is>);

    --Check status from second
    select * from status where id = <whatever the sequence value was>