Как узнать, когда / какие исключения выдают объекты System.Data.Sqlite? - PullRequest
9 голосов
/ 22 июня 2011

У меня проблемы с выяснением, для поставщика данных Sqlite.Net (System.Data.Sqlite.dll) (новая разработка разветвлена ​​ здесь ), какие исключения брошенный различными классами и их методами. Я знаю, что есть исключения SqliteException, но когда?

Я удостоверился, что у меня есть прилагаемый файл документации System.Data.Sqlite.xml, но в нем не указано, какие исключения вызываются каждым методом.

Я не хочу заключать ненужный код в блоки try / catch (или слепо ловить универсальное исключение везде).

Я знаю, что SqliteConnection получен из DbConnection , а SqliteCommand получен из DbCommand , поэтому при необходимости, я думаю, я смогу посмотреть там документацию. Тем не менее, ни один из базовых классов не будет перечислять SqliteException, поэтому когда будут генерироваться исключения такого типа?

PS - я использую версию 1.0.64 (с 2009 года ... сейчас не могу обновить).


UPDATE:

Из-за отсутствия ответов есть ли кто-нибудь, кто использует System.Data.Sqlite.dll? Если да, то какой подход вы используете для обработки исключений, которые могут быть выброшены из объектов, доступных в библиотеке? Есть ли какой-нибудь стандартный способ справиться с этими исключениями, поскольку, похоже, нет документации об исключениях, которые создаются и какими классами?


ОБНОВЛЕНИЕ 2:

Мне удалось найти документацию по SQLite.NET, находящуюся в каталоге c: \ program files \ SQLite.NET \ Doc \ (кажется довольно очевидным). Пока отличная документация, однако она не говорит вам, какие исключения выдается. Лучшее, что я могу сделать, - это посмотреть на базовые классы, которые унаследованы, или интерфейсы, которые реализованы, и посмотреть, какие исключения генерируются. Это по-прежнему не помогает узнать, когда создается объект SqliteException.


ОБНОВЛЕНИЕ 3:

После получения исходного кода выясняется, что ни один из классов сам по себе не содержит /// <exception cref="ExceptionType">Something went wrong!</exception> xml комментариев. Это объясняет, почему ни файл справки SQLite.NET, ни Visual Studio Intellisense не содержат список исключений, которые могут быть выброшены. Я создал тикет , запрашивающий xml-комментарии о включении исключений, предлагая добавить их самостоятельно, если он слишком низок в их списке приоритетов. Я буду держать этот вопрос в курсе всех новых событий для тех, кто может быть заинтересован.

1 Ответ

4 голосов
/ 18 ноября 2011

Вы можете использовать "грубый" способ поиска в коде или с помощью отражателя для исключения.

Es: отражатель -> проанализировать "System.Data.SQLite.SQLiteException" -> подтверждено

    System.Data.SQLite.SQLite3.Bind_Blob(SQLiteStatement, Int32, Byte[]) : Void
    System.Data.SQLite.SQLite3.Bind_DateTime(SQLiteStatement, Int32, DateTime) : Void
    System.Data.SQLite.SQLite3.Bind_Double(SQLiteStatement, Int32, Double) : Void
    System.Data.SQLite.SQLite3.Bind_Int32(SQLiteStatement, Int32, Int32) : Void
    System.Data.SQLite.SQLite3.Bind_Int64(SQLiteStatement, Int32, Int64) : Void
    System.Data.SQLite.SQLite3.Bind_Null(SQLiteStatement, Int32) : Void
    System.Data.SQLite.SQLite3.Bind_Text(SQLiteStatement, Int32, String) : Void
    System.Data.SQLite.SQLite3.ChangePassword(Byte[]) : Void
    System.Data.SQLite.SQLite3.ColumnMetaData(String, String, String, String&, String&, Boolean&, Boolean&, Boolean&) : Void
    System.Data.SQLite.SQLite3.CreateCollation(String, SQLiteCollation, SQLiteCollation) : Void
    System.Data.SQLite.SQLite3.CreateFunction(String, Int32, Boolean, SQLiteCallback, SQLiteCallback, SQLiteFinalCallback) : Void
    System.Data.SQLite.SQLite3.GetIndexColumnExtendedInfo(String, String, String, Int32&, Int32&, String&) : Void
    System.Data.SQLite.SQLite3.Open(String, SQLiteOpenFlagsEnum, Int32, Boolean) : Void
    System.Data.SQLite.SQLite3.Prepare(SQLiteConnection, String, SQLiteStatement, UInt32, String&) : SQLiteStatement
    System.Data.SQLite.SQLite3.Reset(SQLiteStatement) : Int32
    System.Data.SQLite.SQLite3.SetPassword(Byte[]) : Void
    System.Data.SQLite.SQLite3.SetTimeout(Int32) : Void
    System.Data.SQLite.SQLite3.Step(SQLiteStatement) : Boolean
    System.Data.SQLite.SQLite3_UTF16.Bind_Text(SQLiteStatement, Int32, String) : Void
    System.Data.SQLite.SQLite3_UTF16.Open(String, SQLiteOpenFlagsEnum, Int32, Boolean) : Void
    System.Data.SQLite.SQLiteBase.CloseConnection(SQLiteConnectionHandle) : Void
    System.Data.SQLite.SQLiteBase.FinalizeStatement(SQLiteStatementHandle) : Void
    System.Data.SQLite.SQLiteBase.ResetConnection(SQLiteConnectionHandle) : Void
    System.Data.SQLite.SQLiteDataReader.CheckClosed() : Void
    System.Data.SQLite.SQLiteStatement.BindParameter(Int32, SQLiteParameter) : Void
    System.Data.SQLite.SQLiteTransaction.IsValid(Boolean) : Boolean
...