0

如果我从插入或更新语句返回 ORA-12899。如何在不解析字符串的情况下从 OracleException 中提取列名?

ORA-12899: 列 "SCHEMA"."TABLENAME"."COLUMNNAME" 的值太大(实际值:175,最大值:23)。

我想做这样的事情:

try
{
    // Insert code.
}
catch (OracleException orclEx)
{
    if (orclEx.Number == 12899)
    {
        string columnName = GetColumnName(orclEx);
        throw new Exception(columnName + " value is too long.", orclEx);
    }
}
finally
{
    // Finally code
}
4

1 回答 1

0

如果不解析错误消息,我不知道该怎么做。我首先尝试防止不良数据进入数据库。因此,在 ASP.NET 表单中,我使用了这样的正则表达式验证器。这可以防止您传递超过 100 个字符。您可以输入超过 100 个字符,但是当您点击 OK 或 Submit 按钮时,它不会处理数据,直到您缩短输入。

此外,我使用验证摘要来显示 ErrorMessage。

<asp:RegularExpressionValidator ID="regExpInspectionNotes" runat="server" SetFocusOnError="true" Text="*"  ControlToValidate="txtInspectionNotes" ErrorMessage= "Maximum length of inspection notes is 100 characters." ValidationExpression="^[\s\S]{1,100}$" Display="Dynamic"> </asp:RegularExpressionValidator>

此外,我将值传递给存储过程并使用 PL/SQL 进行更新。

就解析错误信息而言,通过解析得到列名确实不会太难。

于 2011-11-10T16:51:59.653 回答