Как динамически получить столбец, который вызвал исключение OracleException

#.net #odp.net #text-parsing #oracleexception

#.net #odp.net #синтаксический анализ текста #исключение oracleexception

Вопрос:

Если у меня есть ORA-12899, возвращенный из инструкции insert или update. Как я могу извлечь имя столбца из исключения 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:

Я не знаю, как это сделать, не анализируя сообщение об ошибке. В первую очередь я пытаюсь предотвратить попадание неверных данных в базу данных. Итак, в ASP.NET для формы я использую средство проверки регулярных выражений, подобное этому. Это предотвращает передачу более 100 символов. Вы можете ввести более 100 символов, но при нажатии кнопки «ОК» или «Отправить» данные не будут обрабатываться до тех пор, пока вы не сократите ввод.

Кроме того, я использую сводку проверки для отображения сообщения об ошибке.

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

Кроме того, я передаю значения в хранимую процедуру и выполняю обновление, используя PL / SQL.

Что касается анализа сообщения об ошибке, на самом деле было бы не слишком сложно получить имя столбца путем синтаксического анализа.