如何知道System.Data.Sqlite对象抛出何时/什么异常?

时间:2011-06-22 18:32:10

标签: .net sqlite exception system.data.sqlite

我很难找到,因为Sqlite.Net data provider (System.Data.Sqlite.dll)(新开发有分叉here),各种类及其方法抛出了什么异常。我知道可以抛出SqliteExceptions,但是什么时候?

我确保我有附带的System.Data.Sqlite.xml文档文件,但它似乎没有列出每种方法抛出的异常。

我不想将不必要的代码包装到try / catch块中(或盲目地在任何地方捕获一般的Exception)。

我知道SqliteConnection派生自DbConnection,而SqliteCommand派生自DbCommand,所以如果有必要,我想我可以查看那里的文档。但是,没有任何基类会列出SqliteException,那么什么时候抛出这些类型的异常?

PS - 我使用的是版本1.0.64(从2009年开始......目前无法升级)。


更新:

由于缺乏响应,是否有人使用System.Data.Sqlite.dll?如果是这样,您采取什么方法来处理可能从库中可用对象抛出的异常?有没有一些标准的方法来处理这些异常,因为似乎没有关于抛出的异常和哪些类的文档?


更新2:

我确实找到了在c:\ program files \ SQLite.NET \ Doc \下找到的SQLite.NET文档(看起来很明显)。到目前为止很棒的文档,但它没有告诉你抛出了什么异常。到目前为止,我能做的最好的事情是查看继承的基类或实现的接口,并查看抛出的异常。这仍然无助于知道何时抛出SqliteException对象。


更新3:

在获取源代码后,似乎没有类本身包含任何/// <exception cref="ExceptionType">Something went wrong!</exception> xml注释。这解释了为什么SQLite.NET帮助文件或Visual Studio Intellisense都没有列出可能引发的任何异常。我创建了一个ticket请求xml注释包含异常,如果它们的优先级列表太低,则提供自己添加它们。对于任何可能感兴趣的人,我会及时更新这个问题。

1 个答案:

答案 0 :(得分:4)

您可以使用“粗暴”方式搜索代码或使用反射器进行异常。

居: 反射器 - &gt;分析“System.Data.SQLite.SQLiteException” - &gt;实例化

    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