Try catch не перехватывает SQLiteException - C#
Формулировка задачи:
Имеется такой метод:
При его выполнении иногда вылетает исключение "SQLiteException не обработано пользовательским кодом. constraint failed FOREIGN KEY constraint failed".
Почему это исключение не перехватывает catch?
bool UpdateData(SQLiteDataAdapter DA, DataTable dt)
{
try
{
DA.Update(dt);
return true;
}
catch (SQLiteException ex)
{
MessageBox.Show(ex.Message, "Ошибка при сохранении данных.", MessageBoxButtons.OK, MessageBoxIcon.Error);
return false;
}
}Решение задачи: «Try catch не перехватывает SQLiteException»
textual
Листинг программы
[ToolboxItem("SQLite.Designer.SQLiteDataAdapterToolboxItem, SQLite.Designer, Version=1.0.97.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139"), DefaultEvent("RowUpdated"), Designer("Microsoft.VSDesigner.Data.VS.SqlDataAdapterDesigner, Microsoft.VSDesigner, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a")]
public sealed class SQLiteDataAdapter : DbDataAdapter
{
// Fields
private static object _updatedEventPH = new object();
private static object _updatingEventPH = new object();
private bool disposed;
private bool disposeSelect;
// Events
public event EventHandler<RowUpdatedEventArgs> RowUpdated
{
add
{
this.CheckDisposed();
base.Events.AddHandler(_updatedEventPH, value);
}
remove
{
this.CheckDisposed();
base.Events.RemoveHandler(_updatedEventPH, value);
}
}
public event EventHandler<RowUpdatingEventArgs> RowUpdating
{
add
{
this.CheckDisposed();
EventHandler<RowUpdatingEventArgs> mcd = (EventHandler<RowUpdatingEventArgs>) base.Events[_updatingEventPH];
if ((mcd != null) && (value.Target is DbCommandBuilder))
{
EventHandler<RowUpdatingEventArgs> handler = (EventHandler<RowUpdatingEventArgs>) FindBuilder(mcd);
if (handler != null)
{
base.Events.RemoveHandler(_updatingEventPH, handler);
}
}
base.Events.AddHandler(_updatingEventPH, value);
}
remove
{
this.CheckDisposed();
base.Events.RemoveHandler(_updatingEventPH, value);
}
}
// Methods
public SQLiteDataAdapter()
{
this.disposeSelect = true;
}
public SQLiteDataAdapter(SQLiteCommand cmd)
{
this.disposeSelect = true;
this.SelectCommand = cmd;
this.disposeSelect = false;
}
public SQLiteDataAdapter(string commandText, SQLiteConnection connection)
{
this.disposeSelect = true;
this.SelectCommand = new SQLiteCommand(commandText, connection);
}
public SQLiteDataAdapter(string commandText, string connectionString) : this(commandText, connectionString, false)
{
}
public SQLiteDataAdapter(string commandText, string connectionString, bool parseViaFramework)
{
this.disposeSelect = true;
SQLiteConnection connection = new SQLiteConnection(connectionString, parseViaFramework);
this.SelectCommand = new SQLiteCommand(commandText, connection);
}
private void CheckDisposed()
{
if (this.disposed)
{
throw new ObjectDisposedException(typeof(SQLiteDataAdapter).Name);
}
}
protected override void Dispose(bool disposing)
{
try
{
if (!this.disposed && disposing)
{
if (this.disposeSelect && (this.SelectCommand != null))
{
this.SelectCommand.Dispose();
this.SelectCommand = null;
}
if (this.InsertCommand != null)
{
this.InsertCommand.Dispose();
this.InsertCommand = null;
}
if (this.UpdateCommand != null)
{
this.UpdateCommand.Dispose();
this.UpdateCommand = null;
}
if (this.DeleteCommand != null)
{
this.DeleteCommand.Dispose();
this.DeleteCommand = null;
}
}
}
finally
{
base.Dispose(disposing);
this.disposed = true;
}
}
internal static Delegate FindBuilder(MulticastDelegate mcd)
{
if (mcd != null)
{
Delegate[] invocationList = mcd.GetInvocationList();
for (int i = 0; i < invocationList.Length; i++)
{
if (invocationList[i].Target is DbCommandBuilder)
{
return invocationList[i];
}
}
}
return null;
}
protected override void OnRowUpdated(RowUpdatedEventArgs value)
{
EventHandler<RowUpdatedEventArgs> handler = base.Events[_updatedEventPH] as EventHandler<RowUpdatedEventArgs>;
if (handler != null)
{
handler(this, value);
}
}
protected override void OnRowUpdating(RowUpdatingEventArgs value)
{
EventHandler<RowUpdatingEventArgs> handler = base.Events[_updatingEventPH] as EventHandler<RowUpdatingEventArgs>;
if (handler != null)
{
handler(this, value);
}
}
// Properties
[Editor("Microsoft.VSDesigner.Data.Design.DBCommandEditor, Microsoft.VSDesigner, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a", "System.Drawing.Design.UITypeEditor, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"), DefaultValue((string) null)]
public SQLiteCommand DeleteCommand
{
get
{
this.CheckDisposed();
return (SQLiteCommand) base.DeleteCommand;
}
set
{
this.CheckDisposed();
base.DeleteCommand = value;
}
}
[Editor("Microsoft.VSDesigner.Data.Design.DBCommandEditor, Microsoft.VSDesigner, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a", "System.Drawing.Design.UITypeEditor, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"), DefaultValue((string) null)]
public SQLiteCommand InsertCommand
{
get
{
this.CheckDisposed();
return (SQLiteCommand) base.InsertCommand;
}
set
{
this.CheckDisposed();
base.InsertCommand = value;
}
}
[Editor("Microsoft.VSDesigner.Data.Design.DBCommandEditor, Microsoft.VSDesigner, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a", "System.Drawing.Design.UITypeEditor, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"), DefaultValue((string) null)]
public SQLiteCommand SelectCommand
{
get
{
this.CheckDisposed();
return (SQLiteCommand) base.SelectCommand;
}
set
{
this.CheckDisposed();
base.SelectCommand = value;
}
}
[DefaultValue((string) null), Editor("Microsoft.VSDesigner.Data.Design.DBCommandEditor, Microsoft.VSDesigner, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a", "System.Drawing.Design.UITypeEditor, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a")]
public SQLiteCommand UpdateCommand
{
get
{
this.CheckDisposed();
return (SQLiteCommand) base.UpdateCommand;
}
set
{
this.CheckDisposed();
base.UpdateCommand = value;
}
}
}