Как узнать, когда/какие исключения генерируются объектами System.Data.Sqlite?

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

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

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

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

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


ОБНОВИТЬ:

Из-за отсутствия ответов, есть ли кто-нибудь, кто использует 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 для включения исключений , предлагая добавить их самостоятельно, если это слишком низко в их списке приоритетов. Я буду держать этот вопрос в курсе любых новых событий для всех, кто может быть заинтересован.


person Jason Down    schedule 22.06.2011    source источник
comment
Ура, значок перекати-поле... *плачет*   -  person Jason Down    schedule 29.06.2011
comment
У них есть несколько дополнительных вопросов для вас в вашей заявке, касающихся работы с отчетами об исключениях xml для этого, а также обновление статуса заявки здесь: system.data.sqlite.org/index.html/tktview?name=1c2dd41f57   -  person Mat Nadrofsky    schedule 15.11.2011
comment
@Mat Nadrofsky: Спасибо за обновление!   -  person Jason Down    schedule 15.11.2011
comment
@Mat Nadrofsky: Похоже, они на самом деле не задают мне вопросы... они риторические. Они в основном не уверены, насколько подробно работать с исключениями (документируете ли вы все исключения, включая те, которые могут быть вызваны платформой .Net, включаете ли вы те, которые всплывают и не обрабатываются в текущем методе, включаете ли вы только те, которые вы выбрасываете явно), поэтому сохраняйте его как низкий приоритет. Это всегда было областью, в которой я также задавался вопросом о правильном подходе.   -  person Jason Down    schedule 15.11.2011
comment
Это очень расстраивает. Жаль, что нет стандартного способа сделать это.   -  person Ben313    schedule 19.12.2012


Ответы (1)


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

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
person giammin    schedule 18.11.2011
comment
Итак, каждый из перечисленных выше методов создает (и, вероятно, выдает) экземпляр SQLiteException? - person Jason Down; 18.11.2011
comment
да, я искал исключение в сборке sqllite и нашел только этот класс, в названии которого есть «исключение». Затем я попробовал, какой класс был создан. Надеюсь это поможет. Извините за мой поздний ответ. Я новичок в stackoverflow - person giammin; 22.11.2011
comment
Ну, это не совсем то, что я искал, но этот совет пригодится. Тем более что, похоже, они не планируют документировать исключения в ближайшее время. Спасибо! - person Jason Down; 22.11.2011
comment
с отражателем вы можете увидеть код, который выдает эти исключения - person giammin; 22.11.2011
comment
Мне действительно нужно поближе познакомиться с рефлектором. - person Jason Down; 22.11.2011