Господа, а как через OleDb в .NET получить ошибку о том, что нарушены правила ссылочной целостности, когда пытаешься удалить, вставить или изменить запись в таблице? Метод OleDbCommand.ExecuteNonQuery для запроса "DELETE FROM MyTable WHERE Id = 137" возвращает 0, но то ли потому, что такой записи с Id = 137 не существует, то ли потому, что нельзя ее удалить, т.к. на нее ссылаются в других таблицах. Как правильно различить эти две ситуации? Он бы хоть эксепшн с номером ошибки поднимал, а как еще?
Здравствуйте, Fortnum, Вы писали:
F>Господа, а как через OleDb в .NET получить ошибку о том, что нарушены правила ссылочной целостности, когда пытаешься удалить, вставить или изменить запись в таблице? Метод OleDbCommand.ExecuteNonQuery для запроса "DELETE FROM MyTable WHERE Id = 137" возвращает 0, но то ли потому, что такой записи с Id = 137 не существует, то ли потому, что нельзя ее удалить, т.к. на нее ссылаются в других таблицах. Как правильно различить эти две ситуации? Он бы хоть эксепшн с номером ошибки поднимал, а как еще?
Вообще-то это зависит от базы данных и ExecuteNonQuery тут не причем. К примеру в Firebird в вашем случае будет сгенерировано исключение.
Попробуйте подписаться на сообщение OleDbConneciton.InfoMessage . Возможно ваш OLE DB провайдер не интерпретирует сообщения от сервера БД как ошибки, а присваивает им более низкий уровень чем требует ADO .Net
Здравствуйте, Andrew Merkulov, Вы писали:
AM>Вообще-то это зависит от базы данных и ExecuteNonQuery тут не причем. К примеру в Firebird в вашем случае будет сгенерировано исключение. AM>Попробуйте подписаться на сообщение OleDbConneciton.InfoMessage . Возможно ваш OLE DB провайдер не интерпретирует сообщения от сервера БД как ошибки, а присваивает им более низкий уровень чем требует ADO .Net
Ясно. Речь идет о базах данных Microsoft Access. Не подскажите какую-нибудь ссылочку, если конечно же такие есть, как с ними надо работать, чтобы отлавливать нарушения ссылочной целостности?