Hi Trent,
I've tried capturing the ErrorSaving event, but it is never triggered. In the process of trying to figure this out I've discovered some other weird behaviour.
I've attached a test project (Test2_VB.zip) which shows what I'm doing. It includes an SQL script to create the required table in a database you create yourself.
1. Run the app, click Browse, leave the Name field blank and do a search. You should see the five available records in the results: Adobe, Apple, Digital, IBM and Microsoft.
2. Click OK. Click New, enter IBM into the Name field and click Save. Nothing happens. The ErrorSaving events are not triggered.

Why?
3. Enter Intel into the name field and click Save. The new Intel business is added, but at the end of the set of records in the business object rather than in the correct order as per the Name field. Using the browse dialog to refill the business object will fix that. Alternatively, as per an earlier post (#2833), you suggest setting the business objects Sort property to fix it.
4. Exit the app. Open BusinessMaintForm.vb. Locate Sub frmBusinessMaintForm_Load and uncomment the one line it contains. Rebuild the app.
5. Run the app, click Browse, leave the Name field blank and do a search. You should see the six available records in the results: Adobe, Apple, Digital, IBM, Intel and Microsoft.
6. Click OK. Click New, enter Novell into the Name field and click Save.
7. Click Browse, leave the Name field blank and do a search. My results, in order, are Microsoft, N, No, Nove, Novel and Novell! What the heck just happened?

Getting back to the original problem, neither of the ErrorSaving events are triggered. When I click the Save button nothing happens. I'm still editing the new record.
I have tried all permutaions of ErrorSavingMode and AutoShowSavingErrors. AutoShowSavingErrors seems to do nothing at all. When ErrorSavingMode is ContinueOnError nothing happens. When it is FailOnError I get the following exception as expected.
BusinessLayerException
An error occurred while saving an the data to the server.
DataLayerSavingException
Violation of UNIQUE KEY constraint 'UK_Business_Name'. Cannot insert duplicate key in object 'dbo.Business'.
The statement has been terminated.
SqlException
Violation of UNIQUE KEY constraint 'UK_Business_Name'. Cannot insert duplicate key in object 'dbo.Business'.
The statement has been terminated.
Source : MicroFour StrataFrame Business
Stack Trace:
at System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection)
at System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection)
at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj)
at System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj)
at System.Data.SqlClient.SqlDataReader.ConsumeMetaData()
at System.Data.SqlClient.SqlDataReader.get_MetaData()
at System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString)
at System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async)
at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method, DbAsyncResult result)
at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method)
at System.Data.SqlClient.SqlCommand.ExecuteReader(CommandBehavior behavior, String method)
at System.Data.SqlClient.SqlCommand.ExecuteDbDataReader(CommandBehavior behavior)
at System.Data.Common.DbCommand.ExecuteReader()
at MicroFour.StrataFrame.Data.DbDataSourceItem.InternalExecuteReader(DbCommand Command)
at MicroFour.StrataFrame.Data.SqlDataSourceItem.UpdateRow(QueryInformation QueryInfo, DataRow RowToUpdate, ConcurrencyExceptionHandler ConcurrencyHandler, AddRowErrorHandler RowErrorHandler, Boolean RecreateCommand)
at MicroFour.StrataFrame.Data.DbDataSourceItem.UpdateRow(QueryInformation QueryInfo, DataRow RowToUpdate, ConcurrencyExceptionHandler ConcurrencyHandler, AddRowErrorHandler RowErrorHandler)
at MicroFour.StrataFrame.Data.DataLayer.UpdateDataTableThread(Object ThreadParams)
at MicroFour.StrataFrame.Data.DataLayer.SaveByForm(DataTable TableToSave, Boolean Transactional, String TransactionKey)
at MicroFour.StrataFrame.Business.BusinessLayer.SaveByForm(Boolean Transactional, String TransactionKey)
at MicroFour.StrataFrame.UI.Windows.Forms.BaseForm.Save(Boolean Transactional, String TransactionKey)
at MicroFour.StrataFrame.UI.Windows.Forms.BaseForm.Save()
at MicroFour.StrataFrame.UI.Windows.Forms.DevEx.MaintenanceFormToolbar.cmdSave_ItemClick(Object sender, ItemClickEventArgs e)
at DevExpress.XtraBars.BarItem.OnClick(BarItemLink link)
at DevExpress.XtraBars.BarBaseButtonItem.OnClick(BarItemLink link)
at DevExpress.XtraBars.BarItemLink.OnLinkClick()
at DevExpress.XtraBars.BarItemLink.OnLinkAction(BarLinkAction action, Object actionArgs)
at DevExpress.XtraBars.BarButtonItemLink.OnLinkAction(BarLinkAction action, Object actionArgs)
at DevExpress.XtraBars.BarItemLink.OnLinkActionCore(BarLinkAction action, Object actionArgs)
at DevExpress.XtraBars.ViewInfo.BarSelectionInfo.ClickLink(BarItemLink link)
at DevExpress.XtraBars.ViewInfo.BarSelectionInfo.UnPressLink(BarItemLink link)
at DevExpress.XtraBars.Controls.CustomLinksControl.OnMouseUp(MouseEventArgs e)
at System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
at System.Windows.Forms.Control.WndProc(Message& m)
at DevExpress.XtraBars.Controls.DockedBarControl.WndProc(Message& msg)
at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
Just to confuse things a bit more, if I run the program using a debug version of the StrataFrame assemblies, I can step through BusinessLayer.SaveByForm. If I run with ErrorSavingMode as ContinueOnError I can see that at the end of the SaveByForm function loReturn.SaveUndoResult is set to CompletedWithExceptions.

This does not seem right to me. SQL Server has raised and exception, yes, but the operation failed completely. A return result of FailedWithExceptions seems more in order.
I am hoping that you have a real simple explanation in that I've missed a step or two somewhere. I'm assuming that's the case as this must work for other StrataFrame users.
I am worried, however, that it was so easy to create a situation that trashed data in the database.

Very much looking forward to your reply.
Regards,
Bruce