Wednesday, October 12, 2011

Catch Oracle error for Entity Framework update

In this example you have a unique constraint on a column(s) and you want to have the error returned to a label on the current page, allowing the user to correct their data entry. I am not using on linq or Entity Sql to do the update.

Here is some code from the details view, notice we are using the OnItemInserted call to the code behind.

DetailsView ID="DetailsView" runat="server" Height="50px" Width="125px"
AutoGenerateRows="False" DataKeyNames="TIMESHEET_ID" AutoGenerateInsertButton="True" DefaultMode="Insert"
DataSourceID="TimesheetEntityModel" OnModeChanging="OnModeChanging1" OnItemInserted="DetailsViewInserted"




-----

Here is the C# code behind to trap the Oracle error

protected void DetailsViewInserted(object sender, DetailsViewInsertedEventArgs e)
{

if (e.Exception != null)
{
MessageLabel.Text = e.Exception.InnerException.Message;
e.ExceptionHandled = true;
e.KeepInInsertMode = true;


}



-----
This will just send the Oracle error back, It may still be too cryptic for users. You can add a contains like .InnerException.Message.Contains("ORA-123456") to search the error message and send back something more refined.


I have added the OnModeChanging function for reference. It returns the user to the main page if they hit cancel.

protected void OnModeChanging1(object sender, DetailsViewModeEventArgs e)
{


if (e.NewMode == DetailsViewMode.Edit || e.NewMode == DetailsViewMode.Insert)
{
if (e.CancelingEdit)
{
//canceled
MessageLabel.Text = "Insert cancelled.";
//Response.Redirect("~/Timesheet.aspx");
}
else
{

//MessageLabel.Text = "Insert completed.";
Response.Redirect("~/Timesheet.aspx");
}

}

3 comments:

  1. Steven

    This is even better than Entity Framework:
    https://www.kellermansoftware.com/p-47-net-data-access-layer.aspx

    ReplyDelete
  2. Is a casino secret? | CasinoFib
    CasinoSecret is an online casino. It has more than 500 games with a 메리트카지노 huge bonus offer. If you're new to online casino カジノ シークレット you 코인카지노 should know that

    ReplyDelete
  3. The firm works with gaming firms of a excessive popularity and a confirmed 솔카지노 observe report. Plus, the positioning itself is highly secure, which implies that players’ information is entirely protected on there. It only simply launched in 2016, which means it has not had as a lot time as its opponents in the business. Even in such quick time|a brief while}, Ignition Casino has managed to build a high-class on-line casino with a promising future.

    ReplyDelete