如何动态获取触发OracleException的列

时间:2011-11-10 13:02:19

标签: .net odp.net text-parsing oracleexception

如果我从插入或更新语句返回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
}

1 个答案:

答案 0 :(得分:0)

我不知道如何在不解析错误消息的情况下执行此操作。 我试图防止坏数据首先进入数据库。 因此,在ASP.NET表单中,我使用这样的正则表达式验证器。 这个可以防止你传递超过100个字符。 您可以键入超过100个字符,但是当您点击“确定”或“提交”按钮时,它将不会处理数据,直到您缩短输入。

此外,我使用验证摘要来显示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进行更新。

就解析错误消息而言,通过解析获取列名真的不会太难。