C# PL/SQL异常和错误处理

C# PL/SQL异常和错误处理,c#,oracle,stored-procedures,plsql,C#,Oracle,Stored Procedures,Plsql,我正在用Asp.Net和C做一个项目。我还使用ODP.NET连接到我的Oracle数据库 我正在使用存储过程向数据库中插入一个值。一切都很好,这也引发了我所有的例外 我有3个例外: 当我尝试插入的值已存在于数据库中时 当我尝试插入空值时 默认的“其他” 当引发前两个异常时,我将错误插入到表Errors中,一切都很顺利 我真正想知道的是,当异常发生时,如何向用户显示消息 类似于dbms_output.put_line(“错误”)…但我希望它显示在我的网页上。这可能吗 欢迎提供任何提示,提前感谢。您

我正在用Asp.Net和C做一个项目。我还使用ODP.NET连接到我的Oracle数据库

我正在使用存储过程向数据库中插入一个值。一切都很好,这也引发了我所有的例外

我有3个例外:

  • 当我尝试插入的值已存在于数据库中时
  • 当我尝试插入空值时
  • 默认的“其他”
  • 当引发前两个异常时,我将错误插入到表Errors中,一切都很顺利

    我真正想知道的是,当异常发生时,如何向用户显示消息

    类似于
    dbms_output.put_line(“错误”)…但我希望它显示在我的网页上。这可能吗


    欢迎提供任何提示,提前感谢。

    您可以修复存储过程以返回整数,0表示ok,1表示类型1的异常,2表示类型2的异常,依此类推。。。通过这种方式,用户界面可以通知用户保存方法没有按预期进行


    通常我不会在存储过程中处理异常,但我知道您希望从SQL记录错误,因此上述方法应允许您执行所需操作。

    您可以修复存储过程以返回整数,0表示ok,1表示类型1的异常,2表示类型2的异常等等。。。通过这种方式,用户界面可以通知用户保存方法没有按预期进行


    通常情况下,我不会在存储过程中处理异常,但我知道您希望从SQL记录错误,因此上述方法应允许您执行所需操作。

    在我们的SQL server存储过程中,我们有如下内容:

    如果@错误0

    否则


    但这取决于存储的操作和返回的其他内容,如果存储的操作返回一个表,则可以使用输出参数返回上面讨论的整数。

    在我们的sql server存储过程中,我们有如下内容:

    如果@错误0

    否则


    但这取决于存储程序的功能和返回的其他内容,如果存储程序返回一个表,则可以使用输出参数返回上面讨论的整数。

    由于.NET程序是您的客户机,您应该让任何未处理的异常从PL/SQL程序传播到客户机,你可以像处理其他例外一样处理它

    换句话说,您应该从PL/SQL代码中删除“when others”异常,并用C#exception块包装数据库调用(使用ODP.NET)。在那里,您可以捕获异常并获取Oracle错误号和文本,如果需要,可以将其显示给用户


    (使用这种方法,您还可以在PL/SQL代码中使用RAISE_APPLICATION_ERROR向C#client发回错误信号。)

    由于.NET程序是您的客户机,因此您应该让任何未处理的异常从PL/SQL程序传播到客户机,在那里您可以像处理任何其他异常一样处理它

    换句话说,您应该从PL/SQL代码中删除“when others”异常,并用C#exception块包装数据库调用(使用ODP.NET)。在那里,您可以捕获异常并获取Oracle错误号和文本,如果需要,可以将其显示给用户


    (使用这种方法,您还可以在PL/SQL代码中使用RAISE_APPLICATION_ERROR向C#client发送错误信号。)

    Hello Davide,有趣的方法。例如,当异常发生时,它将返回示例1。如何将此值发送回我的应用程序?通过在存储过程中使用OUT变量?谢谢你好,大卫,有趣的方法。例如,当异常发生时,它将返回示例1。如何将此值发送回我的应用程序?通过在存储过程中使用OUT变量?谢谢,非常感谢。有了你的解决方案,我知道我能做什么,怎么做。非常感谢。有了你的解决方案,我知道我能做什么,怎么做。
    return (1)
    
    return (0)